{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:09.827824Z",
     "start_time": "2024-09-26T02:52:09.822749Z"
    }
   },
   "source": [
    "import numpy as np \n",
    "import math \n",
    "import pandas as pd \n",
    "pd.set_option('display.float_format',lambda x:'%.3f' % x)\n",
    "import matplotlib.pyplot as plt \n",
    "plt.style.use('ggplot')\n",
    "%matplotlib inline\n",
    "import seaborn as sns \n",
    "sns.set_palette('muted')\n",
    "sns.set_style('darkgrid')\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "import missingno"
   ],
   "outputs": [],
   "execution_count": 59
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:10.669225Z",
     "start_time": "2024-09-26T02:52:09.922992Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 导入 data_input 处理好的数据\n",
    "df1 = pd.read_csv(r'D:\\pcdaima\\shixun\\shixun1\\data\\Rank\\data_input1.csv',encoding='gb18030')"
   ],
   "id": "ec8fd35a8f503bf",
   "outputs": [],
   "execution_count": 60
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:10.674028Z",
     "start_time": "2024-09-26T02:52:10.670226Z"
    }
   },
   "cell_type": "code",
   "source": "df1.shape",
   "id": "ed2062b0b0bcff69",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49999, 229)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 61
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:10.679489Z",
     "start_time": "2024-09-26T02:52:10.675029Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 样本的好坏比\n",
    "df1.target.value_counts()"
   ],
   "id": "afaecd78f6eb5187",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "target\n",
       "0.000    27802\n",
       "1.000     2198\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 62
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:11.274801Z",
     "start_time": "2024-09-26T02:52:10.680490Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 借款成交时间的范围\n",
    "import datetime as dt\n",
    "# 每个月份的用户数分布\n",
    "df1['ListingInfo'] = pd.to_datetime(df1.ListingInfo, format='mixed', dayfirst=True)\n",
    "df1['month'] = df1.ListingInfo.dt.strftime('%Y-%m')\n",
    "# 绘制成交量的时间趋势图\n",
    "plt.figure(figsize=(10,4))\n",
    "plt.title('借款成交量的时间趋势图')\n",
    "plt.rcParams['font.sans-serif']=['Microsoft YaHei']\n",
    "sns.countplot(data=df1.sort_values('month'),x='month')\n",
    "plt.show()"
   ],
   "id": "75603c137fcccb1e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAGQCAYAAABYjHpbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABf0klEQVR4nO3deVjU5f7/8RcMjpCIuyQi5TGFRBBTVI47WmK2uOQhvy5JCy6Rlh1Lj8tRyWjTLNFcwjalRVPL0ihbPWpgZaS5VlSYkBsKSLHMzO8PLubnxI5MMPB8XBfXJZ/787nnfjOl8+K+P/fHyWKxWAQAAAAAqFbONT0AAAAAAKiLCFsAAAAAYAeELQAAAACwA8IWAAAAANgBYQsAAAAA7ICwBQAAAAB2QNgCAAAAADsgbAEAAACAHRC2AKAWeffdd7VgwQJlZGRYj40bN04bNmywOe/FF1/UPffcU2ZfJ0+e1Ouvv67s7OxibadOndLnn3+u3Nzcahl3XFyctmzZIklKS0vT7t27q9TPvn37lJeXVy1julIvv/yy9u3bV2JbZmamYmNjdfz4cbu89qpVq3TLLbeU2GY2m7V161ZZLJZqfc0PP/xQiYmJpbYdOnSoUv2NHTtWa9euLbHtxhtv1HvvvVfpMQKAo3Gp6QEAAP6/t956Sz/99JPmz59vPXb48GF169bN5rxTp07p6NGjZfZ19OhRLVy4UP/85z/l7u5u0/bBBx/o6aef1v79+9WwYcMrHvebb74pLy8vjRo1Slu3btVzzz2n2267TXPmzFHz5s0r1MdHH32kqKgozZw5U5MnT67U669YsUKxsbGVumbcuHFasGBBiW1paWl64okndNtttykkJKRY+6effqoVK1aoTZs26tSpU6VetyLOnj2rn376qcS2TZs2acGCBTpw4IAWLVokJycnHTlyREeOHKlQ3y1atNCAAQOKHX/++efl5+enXr162Rz/7bffNHPmTE2cOFFdunSpcA2///67MjMzS2z79ddflZWVVW4fs2fP1tatWyv8miUJDw/X4sWLr6gPAKgqwhYA1BKpqan66quvdO+996pBgwaVvv6zzz6zmWn54YcfJElvvPGGmjVrZj3ep08fJScn67rrrisWwqrK1dVVJpNJkjRt2jS1bdtWixcv1rFjx7Rt2zY5O5e/kGLIkCHq0qWLXnjhBd12221q06ZNpcbQsWNHbdu2rULnTpo0qcz2bdu2yWKxaMKECSW2JyQkyM3NTUOHDi2zn169eunChQvFjvv7+1tnAitr5MiR2rp1q958801J0qJFi7Rr164Kh80bbrihxLBVmhUrVig/P18bN27U66+/btP23HPPqX///hXqx2Kx2Mxamkwmm5lVg8EgF5fiH0tatmypqKgom2NZWVlycXGRm5tbma+5fPnyCo0NAOyFsAUAtcQrr7wiZ2dn6/KrpUuXWtvWrVundevWFbvG19dXkuTj46PRo0fr888/t7ZdvHhRkpSYmGgze3XttdcqOTlZnp6epX7gHzp0qBo1aiSpcBatqK/SWCwWZWZmWmdXOnXqpCeeeEIXL17UsWPH1LJlS128eFH/+9//yuznmmuu0YULF/Tuu++WOePWr18/dejQwebYjz/+qN69e5fZf5GcnJwSZ6R27typP/74Q5s2bVLLli114sQJnThxQlLhz7hHjx46d+6cvvjiC3l7e2vz5s3F+mjUqJHGjBlj/b5Lly66+eabrd//NbBUltFo1IoVKzR69Gh9+eWXunTpku6++27deeed5V77wAMPWP9cUFAgf39/m/YTJ05o+/btkqSoqCj17dtX77zzjhYuXKjrr7/eet769eu1a9cutWvXzub6sLAw659///13bdq0Sbt27ZKnp6dmz56tESNGWNujo6MVHR1t/f6+++7Tv//972Jjbty4scaOHWv93mKxaPLkyfrhhx/0/vvvlxm4Svp/BgD+ToQtAKgFLl68qLfffltDhw5V27Zt9a9//UuDBw+WJI0ePVq33nqrzWzMCy+8oP/973/auHGjpMIP4O3atdOUKVOs5+zatUv333+/nn32WV1zzTXW4+np6UpLS1NaWpq+/fbbEsfTq1cva9h6/vnnK7yU6/IP05eLiopS27ZtFRMTU6F+li1bVmZ7s2bNioWtDh06VPg+oNJmrGJiYvT7779bv58zZ471zyNHjlSPHj309ttvKz8/XykpKSXW065dO5uw1bFjR5v76z777DNdunRJP/74o1JSUkocx8mTJ2WxWLRr1y5JUtOmTdWjRw8dOXJEFy5cUEhIiFauXCk3Nzfr7GTR+1WWBg0aqKCgQFLhTNLChQutbatWrdLVV1+tUaNGWet46KGH1KdPH5uwc/r0aX3xxRcaOXKk2rdvb9P/5WFp/vz56tGjh26//Xa5urqqQ4cO+vjjj3X+/HmNGTNG0dHR+uc//ympcEmn2Wwud/yStHbtWn3++ecaOHCgTp06VeI5V199dYV+HgBgb4QtAKgFVq9erZycHPXr109S4Yfrpk2bSpKcnJzUpEkTm3Dh4eEhg8FQLHB89dVX1uV8RUsKk5OTlZ6eLqlwdmbHjh1q0KCB9u3bJxcXF5nNZusH0yeeeEKbN29W69atbfq96qqrtHLlylLHv2LFCqWlpenxxx8vsb1du3Zq166d9YP85cxmc6nLDC9dulThD80pKSkVXtJ2/vx5dezYscS2QYMGFavjxhtvlCTl5ubq1VdfVbdu3fTKK68Uu3bs2LH6448/KjSGd999V6tXry7znPvvv1+S1LNnT7322muKi4vTN998o08++UQBAQHKzs7Wpk2byuxj2LBhJS4XdXJysglRGzdu1DXXXGM9Nm/ePGVlZRW732nlypWyWCyaPn16sT6HDBli/fPjjz+ua665Rn5+fvrpp590+vRp7d27V15eXpKkzp07y9vbW1LhLwvy8/PLrEMqnHl87rnnJBWG1s8++6zE81auXGkzFgCoKYQtAKhhp06dss5QXan77rtPOTk5NsdmzZpl/fMjjzyid955R3379lXjxo318MMPKyUlRVu2bJHFYtHOnTs1YMCAYveMGQwG6yxESbZu3arffvutzHNKsn//fs2dO1dPPfWUgoKCbNo+/vhjzZ49W9HR0TbL00rStm1bDR06VPfdd1+FXnfDhg02s32XMxqNxTb1cHJyklQYSM6cOaMlS5aUuMzRYrFU+H67iIiIEsOnJMXGxur999/Xzp07JRXeE1eSc+fOad68eWW+Ts+ePat0b9748eN18eJFjR8/3uZ4enq6DAaDNZTFxsaqc+fOMplM+vHHH3X8+HEdOXJEGRkZiouL07p169S8eXPNnj1bjz32mMxmsxo0aGATdo1Go/X+rf3796tjx47WXzYUiY+PV3R0tAwGg/r06aOVK1fKaDRa2xMTE3X//ferR48eFQ7dAGBvhC0AqGGLFy+2+a1+YmKiJk6caHNOefdsSdLEiRN14MCBMl/r2LFjeuqpp6zL2kwmk3VW6euvv1Z6erpuuummStfQqFGjYlvM79+/X5s3b9a0adNKDDZffvmlpkyZInd3dzVu3LhYe7du3dSxY0fNmDFDU6ZM0YMPPmgNPVLhsreiWY4i77//fqXGXTSDNXHiRM2dO7fMc4u2XO/Vq1epG0wUFBRUeHfHy2cv/6ro51FaIPyrl156qVjQ3bt3ryIiIkq95uDBgzbbuV+8eFG//PKL9Z4yZ2dn3X333daNOP7qzJkz+t///mfd9OLSpUu67bbbZLFY5OXlpYKCAvXt21eRkZG6/vrr5e7uLnd3d02bNk1S4Szg3Llz1b17d7m7u1s3Elm5cqU8PDz0/PPPW18rKSlJixYt0s0336xHH31UkydP1j333KMnnnhCrVu31ksvvaQVK1bo5ptv1mOPPValDWYAwB4IWwBQg3bs2KFPP/1UY8eOtX7IDQwM1I4dOyrdV9OmTXXu3LkSd78rkpeXp3/+85/W+8Hy8/OtO8C1atVKo0ePLjFIZGVl2QS7Ivfcc48eeeQRNW3aVJcuXdKff/5pnYV58cUXtXv37hKXm3322WeaMWOGmjZtqldeeUXXXnttsXOaN2+ul19+WbNnz9bq1av1448/6umnn7ZuiHDffffprrvuklT4Qb+yz+dq0KCBdcanIh/OnZ2d9fbbb+vnn3/Wgw8+qPvuu6/YBhMFBQXFguMvv/xisxHJmTNndNVVV0kqnL1bt26dXnrppXJ31qtun332WbEdDE+fPq3vvvtOUuFsZkmPHSiSmJhos+GJh4eH1q5dK19fX3l6eio0NFS+vr4KDg6WJB04cEALFixQixYtNG/ePD377LMaN26c3n33XbVo0cK61f2vv/5aLPD37NlT69ats85Ybdy4UbNnz9Ytt9yiVq1a6dy5c3riiSc0fPjw6vnhAEA1IWwBQA06efKkOnXqpHvuuccattzc3Irdi1VRS5Ys0auvvlpqe9EH+yIXL17Ur7/+KqlwFqWke65yc3Pl7u5us5Od2WzWk08+aQ1Wnp6ekgqDRLt27fTTTz/p888/180336y2bdtar7NYLHrhhRe0YsUKeXt7a8GCBYqNjVV0dHSxsJGamqqoqCjNmjXLOnsxYcIErV27Vs2bN1eDBg2sIWnevHn65JNP1KRJE5s+Lly4YL3n7XKZmZnq1auX1qxZU6ze7OzsYg8rLtq8wWg0qnXr1kpOTta0adO0efNmtWrVynpeXl6ezdI2Sfrmm2/0zTff2BwrCmlms1kHDhzQK6+8YrO5SWUdPny4Qscu98ADD+iBBx5QQUGBXFxcdObMGfXt21dPPfWUbr/99iqNo0ePHnJxcdGFCxd04cIFGY1GXbx4UatXr9Yrr7yiVq1aad26derUqZMGDRqkTz75RJ06dVLnzp318ccf6+GHH9Zvv/0mPz+/Yn33799fWVlZSkpK0meffab9+/fLzc1NTZs21a+//qoVK1Zo//796tKlizp06KDrrruuSjUAQHUibAFADbrllls0cODAEmdWJkyYoKSkpHL7KNo8QZLmzp1b7nK4y50+fVrnzp3TyZMnrZsV/FVOTo5at25tsxtiVlaWTdgqeibWL7/8onbt2mnVqlVydna2bvAgFS5ZfOCBB/Txxx+rZ8+eev75561bjbdv397mXEmKi4vT0aNH1bhxY82ePVtNmjTR8uXL9fDDD9sExiIDBgywWXomFT7zy8XFpdjx2bNnKyMjo8R69+zZo1tvvbWUn1jhDOLy5cs1btw4PfDAA3rttdes719JywhHjBihJUuWWL+fNGmS9b66IUOG6Prrr9eLL76oO++8s9RlheV5+umnq3Rddna2unfvrscee0wDBw4s1v7DDz9o5MiRJV5rsViKHVuxYoXWr18vqXAmsFevXtqzZ4/Wr1+voUOHatGiRdZnvrm5uVlnokaMGKEXX3xR7733njw8PIqNZcOGDdq8ebOOHz+uRo0aqX///lqyZIn1/sLU1FR99NFH+vzzz/X2228rLy9P//nPf6r0MwGA6kTYAoAaVLQzW9FugX/VrVs3mw/qf3V5sCpvCWERT09Pubu7KzMz0zqr9d1335UatrKzs4uFgD///FPS/99uvGgm7ocffpDBYND27dt1xx132MzQGQwGderUSS1atNCCBQvUoEED9ezZUz179lRcXJzCw8PVsmVLSdJPP/2kTZs2adCgQerataskaerUqXJ3dy91E45PPvlEPXr0sDn2xx9/yMnJqdjxP//8U3369Cmxn549e2rGjBk2x/668UbXrl01ffp0LV26VMuWLdOjjz4qqeSZLScnJ5uH9V5+35mTk5OmTJmiGTNmKC4uTg8//HCJYyrPsmXL1L17d5tjX3/9tWbOnFnmdVlZWZJkXdYoFc62Hjx4UFLhM9kee+yxEq/96aefiu2mGB4eLn9/fzk7O8vX19f6/vv4+Oj48eM6ffq0zQO2i3h7e2vTpk3avXu3+vXrV+y/ty5duuj8+fOaN2+egoKC9MADD2jDhg363//+p2uvvVYdOnTQ0KFDFRERoby8PCUnJ6tLly4l7hgJAH8nwhYA1GJFzycqq71oq/fVq1eXuYSwyLJlyzR8+HAdOHBAFotFLVu21AcffGDz4N3L/frrr9bAU6RoM4yisNWuXTt5eHjoyy+/1Ouvv66mTZuWGBwefPDBYsfmzp2r0aNH66GHHtL69etlMBg0d+5cGQwGm+dcSaU/H0uSQkNDq2Vmq1mzZsXCmcFgKHbePffco4SEBL3//vuaOnWqPDw8lJubW+ENMorceOON8vb2LnfZX1maNWumq6++utix8hQ9rLoo5EqFz1Ur+nkdO3as1CWFiYmJxcJWq1atbB5+/OOPP0oqDLdz5szRlClTbILn5ZydnfWvf/2rxJ0Tg4KCbHar7Nu3r3766Sf9/PPP+uSTT6zPRnvzzTcVFBSknj17llc6APwtCFsAUIv9+eef1g+spbUXLWErWkKYmJioHj16KDExUREREdq+fbuaN2+u/Px863I/qfCDaevWrTV58mQ98cQTOnv2rM2Hbqnww/jp06eL3UOTmZkpSTYfjHv37q0PP/xQkvTUU09Zt08vabbncn5+frr//vv13HPP6bHHHlPDhg31zTffaP78+RXejU8qXNZW9MDey4+VdvxKGQwGLV++XB4eHvLw8JBUeH9badu0l9XP66+/XuzZZpWRkZFRbHa0tDB5udTUVOsYijz88MMlLimsiH379hVbDnq51atXl/lssdWrV2vQoEGltickJKhBgwbq1auX7rjjDmuwvXDhgk6cOFHslwIAUNMIWwBQix04cKDUGacil/8WPykpSRMnTtT69ettlqv997//1blz57Rx40YZDAalpKTo008/VUREhG666SbFxMRo48aNxZbPFW0l/9dd93777TdJtjMiRTsKDh061GY2ZMaMGWrcuLGeeuqpUmuYMmWKjhw5ojfeeEOSNHr06GLPdyrPhx9+WGycRUo6XtVAcbl27dpZ/5yXl6eCgoJKhy1JVxS0JJW7XLA0P//8syRp+fLlWrp0qaTCZaadOnWSJIWFhSklJaXC/Q0ZMkTHjh0rdnzBggV6//33tWfPnhJ/Pp9//rkiIyOLbWRyOZPJpGeeeca69NXJyUmenp5q3769rrvuOnXs2FHOzs7q2LGjNfwCQE0jbAFALRYSEqKXX3651PZJkyZZlxHm5eXpscce07Bhw9SnTx/t3bvXet78+fM1bNgwxcXF6e6779acOXN01VVX6d5771Xz5s112223ad26dQoLC7PZ4n3Hjh1q0KCBbrjhBm3fvl0mk0kNGjTQ6tWr5ebmZp3xWr9+vfU5YMeOHVNOTo71PqDjx4/bPMC2JN9//73S0tKs36empurHH38sd1dGs9kss9ms2bNn69FHHy02M/fAAw/IxcVFzz77rM3xc+fOyWw2q6CgQM7OztZnjV2JoiV5f91VcevWrdq6davNsdJCYVXNmjVLnTt3LrGtaKfIknzzzTfy9fXVsWPHtGDBgmLt69atK3VL/YMHD+o///mPTagvyb59+7RlyxbdcccdpQbR8+fPS1Kxh0lfzmAw6KOPPlJ2drZSUlKsX8eOHdPHH39s3STm/vvvL/FxAwBQEwhbAFBHrFmzRufOnbOGs6Klc05OTrr66qu1cOFCtWnTRsuXL7c+86jow+20adO0Y8cOPfLII9q4caPc3d31+++/66OPPlJoaKiaNGmivXv3Wp8X1aBBA/33v/+V2WzW/Pnz9dZbbykoKEj9+vXTihUrNHXqVD377LP6888/9dtvv5W6o91XX32luLg4ffrpp3Jzc9N///tfWSwWPfPMM7r99tsVFhamiRMnKjAwsMTrn3vuuTKXpRUpK9xMmTJFDz30kPX7hISEEp8pVp6vvvpKkordOxUQEKBbbrnF+v3GjRvL7evixYsVevZX06ZNNWPGDIWFhZW6wUlp8vLylJSUpHvuuUetW7e2brZStFOiZDtz91cdOnTQiBEjSm3Pzs7Wq6++qhdeeEHe3t7697//Xeq5P/74o5ycnGy20S+Nu7u7AgICFBAQYHP8woULOnLkSLnBHgD+ToQtAKjF9u3bV+4H/6JlhHfddZf69OmjLVu26KqrrrI+GLlFixaSpNtvv13PPvus1q1bp9tvv13jxo2z9tGuXTvNmzdP8+bN04QJE7Ru3To9++yzysnJ0dixYyVJc+bM0b333iuTyaS2bdsqMzNTI0aM0C+//KLw8HDNmzdPRqNRFy5c0GuvvaYBAwbIaDTKYrGod+/e1tc6duyYPvroI23fvl0///yzGjRooDvvvFNTp061zsIMGjRIK1as0Lvvvqvt27fLx8dHQ4YMUe/evRUQEKDmzZsrLy9PkZGRioyMLPVn8/DDD8tgMJS5hFGyva+sU6dOxbZ+/+vDf9966y0lJSWpVatWuuqqq3Tx4kVt3bpVLi4uNrVK0nXXXWezbf5XX32lP/74w/p9VlaWnn76aTVq1EgNGzZURkaGEhISrEv5ytKkSRNNmzat3POKnDt3zjr7t2PHDmVnZ6tv374KDAyUyWRSdHS0Fi5cqHfeeUfdunWTl5eX3Nzc5OzsbJ3BKppNLJoZzM/PV7t27TR48GCdO3dOX3/9tT755BPrLNSAAQMUExMjd3d35eXl6ZFHHpG7u7vc3NzUoEEDZWRk6L333lNgYKB1w5XLpaSkVCn8AkBtQNgCgFqsMlu/e3h46IYbbtDUqVN14cIF64OIi2avvvjiC61evVphYWElbuc9ZswYnTp1SqtXr9a+ffs0YMAA5efnKyQkxNr/5ffCNGrUSCNGjFBQUJDNduxF23OvX79eJ0+e1JgxY9SjRw998803evDBB607x7Vt21bTp0/XHXfcUWypm5eXl2JiYjRt2jRt2rRJW7du1fr167V+/Xo1aNBA77zzjl544QVt3769Qj/HG264ocz2W2+9Vc8884wkqX379sUC3Nq1a22+L9re/nKtWrXS/PnzbZY+bt682WZbdal4cGvcuLESEhKs2/Y7OTmpffv2mj9/fvmFlSEtLU0vvPCCGjVqpKuuuko//PCDfvzxR+uW97/99ps6depknTUMDw9Xnz59rFuwb9mypUKPEpCkhQsX6tixYxo5cqRMJpOMRqMGDhyoCRMm2NxTaDQadfjwYf3666/WTUrc3d3Vq1evUutt2bKloqKiqvQzWL58eZWuA4Dq4mSpji2ZAABXJD093ToDMGrUKEmF25wbDIYK3bNVdL+KVLjTntlsLnG78t27d6tPnz5l3qN04sQJ61KsP//8s0obPpTEbDZrxowZ8vLy0k033aQbbrih3Pt9iphMJn377bf6/PPP1bZtW4WHh1fLmP7q5MmTatiwYYWWs5nNZuXm5io3N1cuLi4lblleGSaTSSaTSc7OzqVuj/7vf/9b33zzjT755JNy+8vNzVVwcLByc3MlFT5Lq3fv3lqyZIl1ZnD//v2lPm9MknXmqmhsZrPZGpIsFov1/fPw8JCLi4veeecda3gq7+dx+fWlmT17tr799lt98MEH5dZbktDQUPXt21eLFy+u0vUAcKUIWwAA1HEmk6nE8A0AsC/CFgAAAADYwZXvdQsAAAAAKIawBQAAAAB2QNgCAAAAADsgbAEAAACAHfCcrUrKzPxDJpO5pocBAAAAoIYYDM7y8HAr9zzCViWZTGYVFBC2AAAAAJSNZYQAAAAAYAeELQAAAACwA8IWAAAAANgBYQsAAAAA7ICwBQAAAAB2QNgCAAAAADsgbAEAAACAHRC2AAAAAMAOCFsAAAAAYAeELQAAAACwA8IWAAAAANiBS00PAAAAAKhvLAaDcvPMNT2MKmlodJaTyVTTw3AIhC0AAADgb5abZ9ajq76q6WFUyZPTesjVUNOjcAwsIwQAAAAAOyBsAQAAAIAdELYAAAAAwA5qTdjKzs7WvHnz1LNnT3Xr1k0zZszQ6dOnre3x8fEKDQ1VYGCgJk6cqNTUVJvrExISNGzYMAUEBGj06NE6dOiQTfv+/fs1atQoBQQEaPjw4dq9e/ffUhcAAACA+qnWhK3HHntM+/fv13PPPae4uDj99ttvevjhhyVJO3fuVExMjKZPn674+HgVFBRo6tSpMpsLd3A5cOCAZs6cqfDwcG3atEleXl6KjIxUdna2JCk1NVWRkZEKCQnR5s2bFRwcrKioKJ08ebLG6gUAAABQt9WasHXw4EGNHz9eISEhuuGGGzR16lQdPHhQkrR27VqFh4drxIgR6tKli6Kjo3XixAklJSVJkuLi4tS/f39NmjRJfn5+WrJkibKyspSQkCBJ2rBhg3x8fDRr1iz5+vpq3rx5atKkibZs2VJj9QIAAACo22rN1u/Dhg3Tjh07NGzYMBmNRr399tsaNmyYMjMzdfjwYT300EPWczt06KBWrVopOTlZvXv3VmJiombOnGlt9/DwkL+/v5KTkzV69GglJiaqX79+1nYXFxcFBwcrOTm5SmN1cqp6nQAAAICj4/NwxdSasDVlyhTt27dPffr0kZOTk/7xj3/orbfe0q+//ipJ8vb2tjnfy8tL6enpunjxojIzM4u1t2nTRunp6ZIKlxGW1H706NFKj7NZs0aVvgYAAAC43Kkzl2p6CFVmMDipZUv3mh6GQ6g1YWv+/Pk6d+6c1q1bJ6PRqKeffloPPfSQJk+eLElyc3OzOd/V1VV5eXnKyckptT0jI0OSlJOTI1dX1xKvr6yMjEsymRzzad8AAACoHUwmx50aMpksOns2q6aHUaMMBucKTcLUirD1ww8/aMuWLdq0aZMCAwMlSbGxsRo0aJB69uwpScrPz7e5Ji8vT25ubjIajaW2FwUso9FYZntlWSxVugwAAACoE/g8XDG1YoOM48ePS5Kuv/5667E2bdqoWbNmKigokCSlpaXZXJOWliZvb281a9ZMRqOxxPZ27dpJkjw9Pa1LCktqBwAAAIDqVivCVuvWrSVJP/74o/XY6dOnlZGRoWuuuUZt27bV3r17rW0pKSlKT09XSEiInJ2dFRQUpD179ljbs7KydOjQIYWEhEiSunfvbtNuMpmUlJRkbQcAAACA6lYrlhF2795d/v7+mj17tmbPnq0GDRromWeekZeXlwYOHKhz585p2bJl8vPzk7e3t2JiYjRo0CD5+vpKkiIiIhQVFaXg4GAFBQUpNjZW7du314ABAyRJEyZM0JgxYxQbG6ubbrpJ8fHxMpvNGjlyZE2WDQAAAKAOc7JYaseKy3Pnzunxxx/XF198oYKCAvXq1Utz585Vu3btZLFY9Pzzz+v1119Xbm6uBg8erAULFsjDw8N6/caNG7V69WplZmaqd+/eWrRoka6++mpr+wcffKClS5cqPT1dgYGBWrhwoTp27FjpcWZkXFJBARtkAAAAoOr+NDnp0VVf1fQwquTJaT3kaqgVEaLGuLhUbIOMWhO2HAVhCwAAAFeKsOXYKhq2asU9WwAAAABQ1xC2AAAAAMAOasUGGQAAAKjfLAaDcvMc91aNhkZnOZlMNT0M1DKELQAAANS43Dyzw97DJBXdx1TTo0BtwzJCAAAAALADwhYAAAAA2AFhCwAAAADsgLAFAAAAAHZA2AIAAAAAOyBsAQAAAIAdELYAAAAAwA4IWwAAAABgB4QtAAAAALADwhYAAAAA2AFhCwAAAADsgLAFAAAAAHZA2AIAAAAAOyBsAQAAAIAdELYAAAAAwA4IWwAAAABgB4QtAAAAALADwhYAAAAA2AFhCwAAAADsoFaErcTERPn6+pb4tW3bNklSfHy8QkNDFRgYqIkTJyo1NdWmj4SEBA0bNkwBAQEaPXq0Dh06ZNO+f/9+jRo1SgEBARo+fLh27979d5UHAAAAoB6qFWGra9eu+vDDD22+HnvsMTVq1EgDBw7Uzp07FRMTo+nTpys+Pl4FBQWaOnWqzGazJOnAgQOaOXOmwsPDtWnTJnl5eSkyMlLZ2dmSpNTUVEVGRiokJESbN29WcHCwoqKidPLkyZosGwAAAEAdVivClqurq6655hqbr23btmnChAlq2rSp1q5dq/DwcI0YMUJdunRRdHS0Tpw4oaSkJElSXFyc+vfvr0mTJsnPz09LlixRVlaWEhISJEkbNmyQj4+PZs2aJV9fX82bN09NmjTRli1barJsAAAAAHVYrQhbf7Vv3z4dPnxYERERyszM1OHDh9W/f39re4cOHdSqVSslJydLKlyGeHm7h4eH/P39bdr79etnbXdxcVFwcLC1HQAAAACqm0tND6AkL774om6//XY1bdpUhw8fliR5e3vbnOPl5aX09HRdvHhRmZmZxdrbtGmj9PR0SYXLCEtqP3r0aJXG5+RUpcsAAABQh9Wnz4j1qdYrUevC1q+//qo9e/ZYN8bIycmRJLm5udmc5+rqqry8vDLbMzIyrH24urqWeH1lNWvWqNLXAAAAoGynzlyq6SFcEYPBSS1bulf4fEeut7K11me1Lmy98cYbCgwMlJ+fnyTJaDRKkvLz823Oy8vLk5ubW5ntRQHLaDSW2V4ZGRmXZDKZK30dAAAASmcyOfZUiclk0dmzWZU433HrrWytdZHB4FyhSZhaF7YSEhJ05513Wr/39PSUJKWlpcnHx8d6PC0tTWFhYWrWrJmMRqPS0tJs+klLS5O/v7+1j6IlhZe3t2vXrkpjtFiqdBkAAADqsPr0GbE+1XolatUGGUeOHNHJkyc1ZMgQ6zFPT0+1bdtWe/futR5LSUlRenq6QkJC5OzsrKCgIO3Zs8fanpWVpUOHDikkJESS1L17d5t2k8mkpKQkazsAAAAAVLdaFbYSExPVokULtW/f3uZ4RESEXn31Ve3cuVMHDx7U3LlzNWjQIPn6+lrbd+7cqTfeeENHjx7VnDlz1L59ew0YMECSNGHCBB08eFCxsbE6fvy4oqOjZTabNXLkyL+9RgAAAAD1Q61aRvj999/r+uuvL3Z8/PjxOn/+vBYtWqTc3FwNHjxYCxYssLaHhoZq7ty5WrlypTIzM9W7d2+tWbNGBoNBktS5c2ctXbpUS5cu1Zo1axQYGKj169fL3Z0b+wAAAADYh5PFworLysjIuKSCAjbIAAAAqE5/mpz06KqvanoYVfbktB5yNVT8Y7Uj11vZWusiF5eKbZBRq5YRAgAAAEBdQdgCAAAAADsgbAEAAACAHRC2AAAAAMAOCFsAAAAAYAeELQAAAACwA8IWAAAAANgBYQsAAAAA7ICwBQAAAAB2QNgCAAAAADsgbAEAAACAHRC2AAAAAMAOCFsAAAAAYAeELQAAAACwA8IWAAAAANgBYQsAAAAA7ICwBQAAAAB2QNgCAAAAADsgbAEAAACAHRC2AAAAAMAOCFsAAAAAYAeELQAAAACwA8IWAAAAANgBYQsAAAAA7KBWha3z589r9uzZ6tWrlwIDAzVt2jRrW3x8vEJDQxUYGKiJEycqNTXV5tqEhAQNGzZMAQEBGj16tA4dOmTTvn//fo0aNUoBAQEaPny4du/e/bfUBAAAAKB+qjVhKzs7W+PGjdOZM2cUGxurN998U7feeqskaefOnYqJidH06dMVHx+vgoICTZ06VWazWZJ04MABzZw5U+Hh4dq0aZO8vLwUGRmp7OxsSVJqaqoiIyMVEhKizZs3Kzg4WFFRUTp58mSN1QsAAACgbqs1YWvdunUym8164YUXFBwcrOuvv17Dhg2TJK1du1bh4eEaMWKEunTpoujoaJ04cUJJSUmSpLi4OPXv31+TJk2Sn5+flixZoqysLCUkJEiSNmzYIB8fH82aNUu+vr6aN2+emjRpoi1bttRYvQAAAADqNpeaHkCRLVu2aMqUKTIajTbHMzMzdfjwYT300EPWYx06dFCrVq2UnJys3r17KzExUTNnzrS2e3h4yN/fX8nJyRo9erQSExPVr18/a7uLi4uCg4OVnJxcpbE6OVXpMgAAANRh9ekzYn2q9UrUirB16tQpnT59Wo0aNdKECRN0/PhxdejQQXPmzJHBYJAkeXt721zj5eWl9PR0Xbx4UZmZmcXa27Rpo/T0dEmFywhLaj969Gilx9qsWaNKXwMAAICynTpzqaaHcEUMBie1bOle4fMdud7K1lqf1YqwdebMGUnS+vXrNXXqVF199dVas2aN7r33Xq1YsUKS5ObmZnONq6ur8vLylJOTU2p7RkaGJCknJ0eurq4lXl9ZGRmXZDKZK30dAAAASmcyOfZUiclk0dmzWZU433HrrWytdZHB4FyhSZhaEbYKCgokSXfffbf1Pq0nn3xS//znP633ZeXn59tck5eXJzc3N+uyw5LaiwKW0Wgss72yLJYqXQYAAIA6rD59RqxPtV6JWhG2WrRoIUny8fGxHmvSpImaN29u/T4tLc2mPS0tTWFhYWrWrJmMRqPS0tJs+kxLS5O/v78kydPT07qk8PL2du3aVXstAADAfiwGg3LzHHOFSUOjs5xMppoeBoC/Ua0IWz4+PmrRooWSk5N1ww03SCp85tb58+fl5+entm3bau/everVq5ckKSUlRenp6QoJCZGzs7OCgoK0Z88ejRo1SpKUlZWlQ4cO6d5775Ukde/eXXv27NEDDzwgSTKZTEpKSrK2AwAAx5CbZ9ajq76q6WFUyZPTesjVUNOjAPB3qhVhy9nZWZMmTdKqVavUunVrtWvXTsuXL9e1116rAQMGKC0tTcuWLZOfn5+8vb0VExOjQYMGydfXV5IUERGhqKgoBQcHKygoSLGxsWrfvr0GDBggSZowYYLGjBmj2NhY3XTTTYqPj5fZbNbIkSNrsmwAAAAAdVitCFuSdN999+nPP//UkiVLlJ2drV69emn16tVq0KCBxo8fr/Pnz2vRokXKzc3V4MGDtWDBAuu1oaGhmjt3rlauXKnMzEz17t1ba9asse5k2LlzZy1dulRLly7VmjVrFBgYqPXr18vdnV1UAAAAANiHk8XC7W2VkZFxSQUFjrlWHAAAR/enycnBlxFW/GOXI9+fJlX+HjVHfm+lyr+/jlxvZWuti1xcHGg3QgAAANhy5PvTJO5RAyTJuaYHAAAAAAB1EWELAAAAAOyAsAUAAAAAdkDYAgAAAAA7IGwBAAAAgB0QtgAAAADADghbAAAAAGAHhC0AAAAAsAPCFgAAAADYAWELAAAAAOyAsAUAAAAAdkDYAgAAAAA7IGwBAAAAgB0QtgAAAADADghbAAAAAGAHhC0AAAAAsAPCFgAAAADYAWELAAAAAOzApaYHAAAAqs5iMCg3z1zTw6iyhkZnOZlMNT0MALALwhYAAA4sN8+sR1d9VdPDqLInp/WQq6GmRwEA9sEyQgAAAACwA8IWAAAAANhBrQlbmzdvlq+vr83X4sWLre3x8fEKDQ1VYGCgJk6cqNTUVJvrExISNGzYMAUEBGj06NE6dOiQTfv+/fs1atQoBQQEaPjw4dq9e/ffUhcAAACA+qnWhK2LFy+qa9eu+vDDD61fUVFRkqSdO3cqJiZG06dPV3x8vAoKCjR16lSZzYU3BB84cEAzZ85UeHi4Nm3aJC8vL0VGRio7O1uSlJqaqsjISIWEhGjz5s0KDg5WVFSUTp48WWP1AgAAAKjbalXY8vT01DXXXGP9at68uSRp7dq1Cg8P14gRI9SlSxdFR0frxIkTSkpKkiTFxcWpf//+mjRpkvz8/LRkyRJlZWUpISFBkrRhwwb5+Pho1qxZ8vX11bx589SkSRNt2bKlxuoFAAAAULfVmrB14cIFNWvWrNjxzMxMHT58WP3797ce69Chg1q1aqXk5GRJUmJiok27h4eH/P39bdr79etnbXdxcVFwcLC1HQAAAACqW63Z+v3ChQvatWuXtm/fLm9vb912222aNGmSdamft7e3zfleXl5KT0/XxYsXlZmZWay9TZs2Sk9Pl1S4jLCk9qNHj1ZprE5OVboMAACUoD79u1qfapWoty6rT7VeiVoTtqZPn66pU6cqLy9P+/bt04oVK3T+/HkNHjxYkuTm5mZzvqurq/Ly8pSTk1Nqe0ZGhiQpJydHrq6uJV5fWc2aNar0NQAA2MupM5dqeghXxGBwUsuW7hU+35HrrU+1StRbHkeut7K11me1Jmxdd9111j937dpVJpNJL774osLCwiRJ+fn5Nufn5eXJzc1NRqOx1PaigGU0Gstsr4yMjEsymcyVvg4AAHswmRz718smk0Vnz2ZV4nzHrbc+1SpRb/nnO269la21LjIYnCs0CVNrwtZf+fv7KycnRy1btpQkpaWlycfHx9qelpamsLAwNWvWTEajUWlpaTbXp6Wlyd/fX5Lk6elpXVJ4eXu7du2qNDaLpUqXAQCAEtSnf1frU60S9dZl9anWK1HlDTK2bdum06dPl9h27Ngxff7551UelCR99913atKkidq0aaO2bdtq79691raUlBSlp6crJCREzs7OCgoK0p49e6ztWVlZOnTokEJCQiRJ3bt3t2k3mUxKSkqytgMAAABAdaty2JozZ46OHz9eYltqaqr+/e9/V6q/6OhoffHFFzp69KjWr1+vF198Uffdd5+cnZ0VERGhV199VTt37tTBgwc1d+5cDRo0SL6+vpKkiIgI7dy5U2+88YaOHj2qOXPmqH379howYIAkacKECTp48KBiY2N1/PhxRUdHy2w2a+TIkVUtHwAAAADKVKllhJmZmdYHBVssFp07d06nTp2yOeePP/7Q+++/L2fnyuW4nJwczZo1S7m5ubr22mu1ePFijRgxQpI0fvx4nT9/XosWLVJubq4GDx6sBQsWWK8NDQ3V3LlztXLlSmVmZqp3795as2aN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MzNTvXr10qRJkypU5/HjxzVu3DgFBgZq8ODB2rZtW7Fzatt7e7nqrre+vLcmk0nz5s1T//79FRQUpDvuuENJSUkV6tcR6/2ru+66S507d65Qv45a77hx4+Tr62vzdfDgwTpZqyTt3btX4eHhCgwMVK9evfTuu++W268j1jt79uxi76uvr6+uv/76OlerJCUnJ+vOO+9UQECABg0apHXr1lWoX0et9+uvv9aYMWPUpUsXDR48WO+8845D1yuV/XkqLS1NkydPVlBQkPr27au4uLhy+3PUWqWqfZ4qkQVV9n//93+WF154wXLkyBHLp59+agkNDbXcd999FovFYtmxY4elS5culq1bt1oOHjxoGTt2rGX48OEWk8lksVgsltOnT1uWLFliueGGGyydO3e2rFy50qbvpKQky4oVKyzfffedZe/evZZbbrnFcscdd5Q7poKCAsvatWstAwcOtPj7+1vuuuuuYue8+eablptvvtni7+9vGTJkSJ2u9+jRo5ZbbrnFkpCQYDly5IhlzZo1Fl9fX8uOHTtqrNbLPfXUU5ZOnTqV+D79VVZWlqVPnz6WRx55xHLkyBHLypUrLX5+fpYDBw5Yz6mN76296q1P721ubq5l1qxZli+//NLy3XffWR544AFLt27dLGfOnCm3b0es93KfffaZpVOnTpbrr7++3H4dud7hw4db1q5da/n555+tX7m5uXWy1s8//9zSpUsXS2xsrOXo0aOWpKQky7fffltu345Y79mzZ23e059//tlyzz33WGbOnFnnar148aKle/fulv/85z+WI0eOWLZu3WoJCAiwvP322+X27Yj1njp1yhIUFGRZvHix5eDBg5bly5db/Pz8LElJSQ5Zb3mfpwoKCiy33HKL5e6777YcOnTI8uabb1r8/Pws77//fp2r1WKp+uepkhC2rsCpU6dsvn/33Xctfn5+lpycHMuIESMs0dHR1rYffvjB0qlTJ8u+ffssFkvhB4gJEyZYvvzyS8ugQYPK/A/IYin8D7JTp06WzMzMMs/Lzs62hIWFWd566y3LI488UuJ/QCNHjrSsW7fOsmzZskr9B+SI9WZkZFguXbpkcywiIsLy0EMP1XitJ06csPTq1cty9913V+gvh1deecXSu3dvmw9gY8aMsTzyyCPW72vze1vd9da39/Zy586ds3Tq1Mmya9eucvt25Hr/+OMPy4033mh54IEHKhy2HLXePn36WD7++OMK1VjEEWvNz8+3DBo0yLJixYpK1WqxOGa9f/XTTz9Z/P39LT/88EOdqzU5OdnSqVMnS1ZWlrX9/vvvtyxcuLDcvh2x3ieffNIyfPhwi9lstrZHRERY7r//foest7zPU7t27bL4+/tbzp49az324IMPWsaNG1fnarVYqv55qiQsI7wCbdq0sfm+YcOGMpvNyszM1OHDh9W/f39rW4cOHdSqVSslJydLkvr3769XX31VvXr1qtBrmc1mNWzYUG5ubmWe16hRI+3cuVNjxoyRk5NTiee8/fbbuvfee+Xi4lKh1y7iiPU2bdpUV111lc0xo9Eok8lUZr/2rtVsNmvevHmaMmWKWrVqVeZYiiQmJqp37942D+Hu3bu3vv32W+v3tfW9tUe99e29/etrSIU/g/I4cr0rVqzQddddp4EDB1aoX8lx683MzFSzZs0q1F8RR6z1yy+/1OnTpzV+/PiKlmnliPX+1apVqzR06FB16NChzH4dsVY/Pz/94x//UHx8vPLz83Xo0CF98803Gjp0aLl9O2K9P/74o/z8/Gw+e/Ts2VPfffedQ9Zb3uepxMREde7cWS1atLAe6927t5KTk2Up45G9jlirVPXPUyUhbFUTi8WizZs3q2vXrjp37pwkydvb2+YcLy8vpaenS1Kpb+5fmUwmff/991q1apXuueeeannTK/raZXGkei938uRJ7du3T717967wNfaodfXq1crNza3UB47U1NRir9umTRv9/vvv1u9r63trr3ovV9ff2yKnTp3S4sWL1bNnT91www0Vfg3Jserdv3+/3nzzTc2dO7fC/f6Vo9Sbk5Oj3NxcTZgwQSEhIbrrrrv01VdfVbh/yXFq/fbbb9W2bVt98sknGjJkiPr166f58+fr0qVLFX4NyXHqvdzvv/+uHTt26K677qpw/5Lj1Go0GrV06VKtXLlSAQEBGj16tP71r39V6u9kyXHqbdq0qU6dOmXTnp2drfPnz1f4NaTaU295Svt55OXl2dyDVRZHqbWir11R1ftJtp7Kz8/XokWLlJiYqA0bNignJ0eSis3KuLq6Ki8vr8L9zps3T2+//bbMZrNuv/12RUZGVuu4q8pR601JSdGUKVPUuXNnjR49ukLX2KPWr7/+Wi+++KLeeuutSoXJnJwcubq62hxzc3Or1M+4PI5ab314b7dt26a5c+eqoKBAAQEBevbZZyv1j4Ej1Xv+/HnNmjVLc+bMUdu2bSvc7+Ucqd4GDRrozTfflJubm86ePavXXntNkyZN0ltvvVWhjUEcqdYzZ87o4sWL+vDDD/X000/r9OnTWrx4sfLz8/XEE09U6DUcqd7LvfHGG+rUqZMCAwMr3L8j1XrmzBlNnjxZt956q8aMGaNjx44pJiZGHTt21PDhwyv0Go5U79ChQzV16lRt2bJFt9xyi5KTk7Vp0yY5O1d8HqM21VuenJycYrPvReOsyNgcqdbqxszWFUpPT9eECRP02Wef6ZVXXlFAQIB1yjk/P9/m3Ly8vHKXxV1u+vTp2rp1q1auXKm0tDSNGjVK2dnZkqTY2Fh17tzZ+hUbG1t9RZXBUev96KOPNGbMGLVv317r1q2zWRZQGnvUmp6erunTp2vOnDm67rrrSjyntFqNRmOx183NzS32j0FVOWq99eW9LdoJ6+WXX5afn59GjBhR7m51jlhvQUGBZsyYoeDg4AoH55LG5ij1SoVhKygoSL6+vurTp49iY2Pl7e2tTZs21blaTSaT8vLytGzZMnXr1k1Dhw7VtGnT9N5775W7BNgR6y1iMpm0adMm/etf/yp3PI5a68svv6wmTZooOjpaXbt21b/+9S/dd999evLJJ+tkvaGhoXrwwQf13//+V4GBgXr00Ud144032iyzc6R6y1Paz0NSuZ9DHK3W6lZ7Y6ADSElJ0cSJE9WpUye988471v/BPD09JRVukenj42M9Py0tTWFhYRXuv3Xr1mrdurX8/PzUt29f9ezZU++//77Cw8P1f//3fxo2bJj13Mqu9a8KR613w4YNeuKJJ/Twww9r0qRJFZoNsFetmzdv1tmzZ7V48WItXrxYklRQUCBJCggI0Pr160ut1dPT0zq1fvnrtmvXrtzXLY+j1luf3tvGjRurcePG6tixo0JCQvTzzz/r5Zdf1tKlS+tUvd98842SkpLUoEEDffDBB5IK1+SbTCYFBARo6tSpmjZtWp2ptyQuLi7q1KlTsSVKdaHWFi1aqFWrVjb3W1577bXKz8/XxYsX1bx58zpVb5Gvv/5aZ8+e1ZAhQ8odj6PWeuzYMfn6+tr8Pezv76/ff/9dFy5cKPMeU0esV5KmTp2qe+65R2fOnFGbNm0UHR1d7rb+tbXe8nh6euqXX36xOZaWlqbGjRs73Hv7dyNsXYGHH35Y3bp10/Lly22mjT09PdW2bVvt3bvXelNfSkqK0tPTFRISUqXXcnJykrOzs/U3f82bNy/zHyV7cMR6jx49qpiYGD333HMV/kdOsl+tf/0fX5KWLVumc+fOacmSJfLy8pKbm1uJtXbv3l2bN2+WyWSSwWCQVHizeVV/xpdzxHrr+3trMBgqNBPgaPUGBARox44dNufv2rVLzz33nLZt21buP5aOVm9J8vPzdeTIkXI3BnHEWrt166a4uDidOXPGejP7iRMn5OHhUe7f8Y5Yb5GPPvpIQUFBFb6B3xFr9fT01Pfff29zzbFjx3TVVVepcePGda7eIkajUW3btlVWVpbee+89LVy4sNxx1cZ6y9O9e3dt375dWVlZ1vezIp9BHLHW6kbYqqKUlBR9//33ioyMLPYAtubNmysiIkLLli2Tn5+fvL29FRMTo0GDBsnX17dC/S9fvlzXXnut/Pz8lJWVpbVr16phw4a66aab7FFOuRy13h07dujqq69Wx44di/1GxsfHp8SZEHvWWlJobNy4sS5dulTu7lRjxozR+vXrtXjxYo0bN04fffSRjh07Vu7MRnkctd769N5u375dv//+u4KDg2UwGPT+++8rKSmp3AeGOmK9bm5uxa4v2pmqvH4dsV5JOnjwoD777DMNGDBAeXl5eumll3Tu3DlNmDChztXat29ftW/fXg8//LBmzpyp33//XS+88ILuueeeMvt11HqLJCUlqW/fvuWOxZFrHTt2rMLDw/X4449rxIgROn78uNasWaM777zTGlbqUr1nzpxRYmKiOnXqpLNnz+q5556Tn59fsQDgKPWWJywsTMuXL9ecOXMUFRWl5ORkJSQkaOPGjaVe46i1VjfCVhWdPXtWkjRjxoxibfPnz9f48eN1/vx5LVq0SLm5uRo8eLAWLFhQ4f7btm2r1atX69SpU/Lw8FBwcLDefPNNtWzZstpqqAxHrffMmTM6efJkiaHtm2++UaNGjYodt3etVeXp6anVq1crOjpab7/9tjp27Kh169ZVeQOBIo5ab316b729vfXaa69p5cqVatCggXx9fRUXF6d//vOfZfbrqPVWlaPW6+7uro8//lhxcXFyc3NTUFCQNm/ebLO05q8ctVYXFxetWbNGCxcu1MSJE9W4cWONHTtW9913X5n9Omq9UuE9KD/88EOFN31y1Fq7dOmiNWvW6Nlnn9Xrr7+u5s2b66677ipz2a/kuPWaTCa98MIL+uWXX9S0aVOFhYXpwQcfLHeDjNpab3nc3Ny0bt06zZ8/X3fccYe8vb21bNkyde3atdRrHLXW6uZkKWtzfAAAAABAlbAbIQAAAADYAWELAAAAAOyAsAUAAAAAdkDYAgAAAAA7IGwBAAAAgB0QtgAAAADADghbAAAAAGAHhC0AAAAAsAPCFgAAAADYAWELAIC/WWhoqCZMmFDTwwAA2BlhCwAAOzl58qRefvnlmh4GAKCGELYAALCT2NhYxcTE1PQwAAA1hLAFAAAAAHZA2AIA1BmzZ8+Wr6+vfvvtN0VGRiooKEiDBg3S1q1bJUkvvfSSBg0apG7dumnixIn66aefbK7fvHmz7rjjDgUFBalr164aM2aM3n//fZtztmzZIl9fX+3Zs0fPPvus+vbtq+7du2vy5MlKT0+XVLh80NfX1/q6vr6+8vX1VWJiok1f3333ncaOHauuXbtqyJAhWr9+vb1+NACAGuBksVgsNT0IAACqw+zZs7V161YFBgbq1ltvlYeHh1avXq2UlBSNGjVKx44dU0REhNLS0hQbG6t//OMf2rZtmyRp8eLF2rhxo4YOHaohQ4YoLy9P7777rhITEzV79mxFRERIKgxbc+bMkZ+fnzp16qTQ0FAdPnxYcXFx6tatmzZu3Kg///xTSUlJeumll7R3716tW7dOkhQYGKimTZsqNDRUTk5OcnFx0YQJE+Th4aH169fryJEjWrNmjQYOHFhDP0EAQHVyqekBAABQ3SZOnKhbb71VknTNNdfozjvv1Icffqhdu3apWbNmkqRTp07p9ddf12+//aZz585p48aNCg8P1+LFi639jB49WmPHjtVzzz2nO+64Q40bN7a2/eMf/9DTTz8tSRo2bJjS0tK0fft2/f777/L09FT//v21Y8cOSVL//v2LjTEtLU1btmyRn5+fJCkoKEg33nijPvzwQ8IWANQRLCMEANQ5AwYMsP75+uuvlyQFBwdbg5YkdezYUZL0+++/69NPP5Uk3XXXXTb9ODk5afTo0frjjz/07bff2rQNGzbM5vuuXbtKKgxxFfGPf/zDGrQkycfHR02bNrUuRQQAOD7CFgCgzvHw8LD+2dXVVZLUtGlTm3Pc3NwkSfn5+Tpz5owkqW3btsX6at26tSTpwoULNsebNGli832jRo0kSXl5eRUa4+XB7/I+8vPzK3Q9AKD2I2wBAOq9oiBW0qzS6dOnJUktW7b8O4cEAKgDCFsAgHqvX79+kqRXX33V5rjFYtHbb7+tZs2aqVu3bpXu12g0SpJycnKufJAAAIfDBhkAgHqvV69euuWWW7Rx40adP39eoaGhys/P1zvvvKPk5GQtXbrUuhyxMoruC1u6dKmCg4PVpUsXeXt7V/fwAQC1FGELAABJTz/9tLp06aK3335bu3btUsOGDdW1a1e98sor6tmzZ5X6HDNmjL755htt3bpV7733nl5++eXqHTQAoFbjOVsAAAAAYAfcswUAAAAAdkDYAgAAAAA7IGwBAAAAgB0QtgAAAADADghbAAAAAGAHhC0AAAAAsAPCFgAAAADYAWELAAAAAOyAsAUAAAAAdkDYAgAAAAA7IGwBAAAAgB0QtgAAAADADv4fLW7OQB2b4DIAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 63
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:11.488206Z",
     "start_time": "2024-09-26T02:52:11.275802Z"
    }
   },
   "cell_type": "code",
   "source": [
    "month_group = df1.groupby('month') # 根据月份计算每个月的违约率\n",
    "time_bad_trend = pd.DataFrame()\n",
    "time_bad_trend['total'] = month_group.target.count()\n",
    "time_bad_trend['bad'] = month_group.target.sum()\n",
    "time_bad_trend['bad_rate']=time_bad_trend['bad']/time_bad_trend['total']\n",
    "time_bad_trend = time_bad_trend.reset_index()\n",
    "plt.figure(figsize=(12,4))\n",
    "plt.title('违约率的时间趋势图')\n",
    "sns.pointplot(data=time_bad_trend,x='month',y='bad_rate',linestyles='-')\n",
    "plt.show()"
   ],
   "id": "5274934f604063e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x400 with 1 Axes>"
      ],
      "image/png": "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v48333wTwcHBSEtLw7fffounnnoK3t7eAICoqCi88MILeP311zF48GDjcwcOHIj333/f5Os+9NBDAAC1Wo3vv/8enTt3xnfffVeufRMmTEBhYWGV/VNi165d+Oqrr6qsM2vWLABA9+7dsX79eqxduxZnz57FgQMHEBYWhvz8fGzdurXKezzyyCPGsF+WSCQyCeg//PAD7rvvPmPZ/PnzkZeXV259+cqVKyEIAl544YVy9yzbj++//z7uu+8+hIaG4saNG0hNTcXx48fRtGlTAEC7du0QEBAAoHiWgVarrfJ1AMCvv/6Kzz//HEDxByIHDx6ssN7KlStN2kJERMQgT0REjZKHh4fx7zdu3CgX5G7fvg2JRFJut3Vvb298++23+Pvvv7F69Wq88MILCAoKglqtxuLFi+Hr64vHH38ckydPxgMPPFBpiAcArVYLmUxmvB40aBA2b96McePGYfny5ejWrRt++OEHfPTRR3jjjTcwYMAAREdHY86cOUhLS8OQIUPg7e2NjRs34qOPPkLz5s3RqlUrk68hk8nKracXiUQAisNuWloaFi9eDLlcXq59giBUODugIk899ZRx9PtuK1aswN69e/Hrr78CQLklCCUyMjIwf/78Kr9O9+7dKwzy1Zk8eTJycnIwefJkk/Lk5GRIJBJj4F+xYgXatWsHvV6PmJgYREdHIyoqCllZWVi7di1Wr14NLy8vzJs3D4sWLYLBYICDgwPatGljvKdMJjOulz99+jTatGlj8v0GFM+wWLhwISQSCXr37o2VK1eafC+cOnUKs2bNQteuXc1et09ERI0HgzwRETUamzZtMhn1nDt3LkJCQuDm5may7rukrpOTU7nykhB58uRJ6PV6rFy5Ep9//rlxKvWqVavw5ZdfAgDeeecdCIIAQRAgFpc/8VWj0cDV1dV43bp1a2zevBlPPvkktm3bBl9fXyxevBiCIGDBggXG4Ojt7Y3vv/8ebdu2RVRUFJYsWYIxY8bgzTffrDCQV6Tk2LcePXpUulmcTqcz+34eHh7lwmqJktdYdpZBVb755hvjNPUSx48fx1NPPVXpcy5evGhypFxOTg5u3bplXMMvFovx9NNPGzfVu1taWhqOHj1qnCGhUqkwatQoCIKApk2bQqfToU+fPpgxYwbatm0LFxcXuLi44LnnngNQPHvhzTffRHh4OFxcXIybAq5c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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 64
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:11.639102Z",
     "start_time": "2024-09-26T02:52:11.489207Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 检查数值型变量的缺失\n",
    "# 原始数据中-1作为缺失的标识，将-1替换为np.nan\n",
    "data1 = df1.drop(['ListingInfo','month'],axis=1)\n",
    "data1 = data1.replace({-1:2})\n",
    "data1"
   ],
   "id": "ab15215f7c646ed8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         Idx  UserInfo_1 UserInfo_2  UserInfo_3 UserInfo_4  WeblogInfo_1  \\\n",
       "0      10001       1.000         深圳       4.000         深圳           NaN   \n",
       "1      10002       1.000         温州       4.000         温州           NaN   \n",
       "2      10003       1.000         宜昌       3.000         宜昌           NaN   \n",
       "3      10006       4.000         南平       1.000         南平           NaN   \n",
       "4      10007       5.000         辽阳       1.000         辽阳           NaN   \n",
       "...      ...         ...        ...         ...        ...           ...   \n",
       "49994   9976       1.000       鄂尔多斯       5.000       鄂尔多斯           NaN   \n",
       "49995   9981       1.000         聊城       4.000         聊城           NaN   \n",
       "49996    999       1.000        秦皇岛       4.000        秦皇岛           NaN   \n",
       "49997   9993       4.000         广州       3.000         茂名           NaN   \n",
       "49998   9994       4.000         上海       5.000         常州           NaN   \n",
       "\n",
       "       WeblogInfo_2  WeblogInfo_3  WeblogInfo_4  WeblogInfo_5  ...  \\\n",
       "0             1.000           NaN         1.000         1.000  ...   \n",
       "1             0.000           NaN         1.000         1.000  ...   \n",
       "2             0.000           NaN         2.000         2.000  ...   \n",
       "3               NaN           NaN           NaN           NaN  ...   \n",
       "4             0.000           NaN         1.000         1.000  ...   \n",
       "...             ...           ...           ...           ...  ...   \n",
       "49994         0.000           NaN         2.000         1.000  ...   \n",
       "49995           NaN           NaN           NaN           NaN  ...   \n",
       "49996         0.000           NaN         2.000         1.000  ...   \n",
       "49997         0.000           NaN         3.000         3.000  ...   \n",
       "49998         0.000           NaN         1.000         1.000  ...   \n",
       "\n",
       "       SocialNetwork_10  SocialNetwork_11  SocialNetwork_12  SocialNetwork_13  \\\n",
       "0                   222                 2                 0                 0   \n",
       "1                     1                 2                 0                 0   \n",
       "2                     2                 2                 2                 1   \n",
       "3                     2                 2                 2                 0   \n",
       "4                     2                 2                 2                 0   \n",
       "...                 ...               ...               ...               ...   \n",
       "49994                 2                 2                 2                 0   \n",
       "49995                 2                 2                 2                 0   \n",
       "49996                 2                 2                 2                 0   \n",
       "49997              1738                 2                 0                 1   \n",
       "49998                 2                 2                 2                 0   \n",
       "\n",
       "       SocialNetwork_14  SocialNetwork_15  SocialNetwork_16  SocialNetwork_17  \\\n",
       "0                     0                 0                 0                 1   \n",
       "1                     0                 0                 0                 2   \n",
       "2                     0                 0                 0                 0   \n",
       "3                     0                 0                 0                 0   \n",
       "4                     0                 0                 0                 0   \n",
       "...                 ...               ...               ...               ...   \n",
       "49994                 0                 0                 0                 0   \n",
       "49995                 0                 0                 0                 0   \n",
       "49996                 0                 0                 0                 0   \n",
       "49997                 1                 0                 0                 1   \n",
       "49998                 0                 0                 0                 0   \n",
       "\n",
       "       target  sample_status  \n",
       "0       0.000          train  \n",
       "1       0.000          train  \n",
       "2       0.000          train  \n",
       "3       0.000          train  \n",
       "4       0.000          train  \n",
       "...       ...            ...  \n",
       "49994     NaN           test  \n",
       "49995     NaN           test  \n",
       "49996     NaN           test  \n",
       "49997     NaN           test  \n",
       "49998     NaN           test  \n",
       "\n",
       "[49999 rows x 228 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>UserInfo_1</th>\n",
       "      <th>UserInfo_2</th>\n",
       "      <th>UserInfo_3</th>\n",
       "      <th>UserInfo_4</th>\n",
       "      <th>WeblogInfo_1</th>\n",
       "      <th>WeblogInfo_2</th>\n",
       "      <th>WeblogInfo_3</th>\n",
       "      <th>WeblogInfo_4</th>\n",
       "      <th>WeblogInfo_5</th>\n",
       "      <th>...</th>\n",
       "      <th>SocialNetwork_10</th>\n",
       "      <th>SocialNetwork_11</th>\n",
       "      <th>SocialNetwork_12</th>\n",
       "      <th>SocialNetwork_13</th>\n",
       "      <th>SocialNetwork_14</th>\n",
       "      <th>SocialNetwork_15</th>\n",
       "      <th>SocialNetwork_16</th>\n",
       "      <th>SocialNetwork_17</th>\n",
       "      <th>target</th>\n",
       "      <th>sample_status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10001</td>\n",
       "      <td>1.000</td>\n",
       "      <td>深圳</td>\n",
       "      <td>4.000</td>\n",
       "      <td>深圳</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>222</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10002</td>\n",
       "      <td>1.000</td>\n",
       "      <td>温州</td>\n",
       "      <td>4.000</td>\n",
       "      <td>温州</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10003</td>\n",
       "      <td>1.000</td>\n",
       "      <td>宜昌</td>\n",
       "      <td>3.000</td>\n",
       "      <td>宜昌</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10006</td>\n",
       "      <td>4.000</td>\n",
       "      <td>南平</td>\n",
       "      <td>1.000</td>\n",
       "      <td>南平</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10007</td>\n",
       "      <td>5.000</td>\n",
       "      <td>辽阳</td>\n",
       "      <td>1.000</td>\n",
       "      <td>辽阳</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49994</th>\n",
       "      <td>9976</td>\n",
       "      <td>1.000</td>\n",
       "      <td>鄂尔多斯</td>\n",
       "      <td>5.000</td>\n",
       "      <td>鄂尔多斯</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>test</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49995</th>\n",
       "      <td>9981</td>\n",
       "      <td>1.000</td>\n",
       "      <td>聊城</td>\n",
       "      <td>4.000</td>\n",
       "      <td>聊城</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>test</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49996</th>\n",
       "      <td>999</td>\n",
       "      <td>1.000</td>\n",
       "      <td>秦皇岛</td>\n",
       "      <td>4.000</td>\n",
       "      <td>秦皇岛</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>test</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49997</th>\n",
       "      <td>9993</td>\n",
       "      <td>4.000</td>\n",
       "      <td>广州</td>\n",
       "      <td>3.000</td>\n",
       "      <td>茂名</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>...</td>\n",
       "      <td>1738</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>test</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49998</th>\n",
       "      <td>9994</td>\n",
       "      <td>4.000</td>\n",
       "      <td>上海</td>\n",
       "      <td>5.000</td>\n",
       "      <td>常州</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>test</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>49999 rows × 228 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 65
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:05:54.062610Z",
     "start_time": "2024-09-26T03:05:54.058815Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 导入变量明细表\n",
    "var_info = pd.read_csv(r'D:\\pcdaima\\shixun\\shixun1\\data\\Rank\\var_info.csv')"
   ],
   "id": "83136841aef20d45",
   "outputs": [],
   "execution_count": 109
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:06:01.305473Z",
     "start_time": "2024-09-26T03:06:01.299777Z"
    }
   },
   "cell_type": "code",
   "source": [
    "base_col = list(data1.columns)\n",
    "var_info2 = var_info[var_info.变量名称.isin(base_col)].reset_index(drop=True)\n",
    "var_info2.变量类型.value_counts() "
   ],
   "id": "76a2c055a68bca00",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "变量类型\n",
       "Numerical      189\n",
       "Categorical     27\n",
       "Index            1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 110
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:06:24.714861Z",
     "start_time": "2024-09-26T03:06:24.633662Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 类别型变量的描述性分析\n",
    "cate_col = list(var_info2[var_info2.变量类型=='Categorical'].变量名称)\n",
    "# 数值型类别变量的desc\n",
    "data1.loc[:,cate_col].describe().T.assign(nuniq = data1.loc[:,cate_col].apply(lambda x:x.nunique()),\n",
    "                                          missing_pct = data1.loc[:,cate_col].apply(lambda x:(len(x)-x.count())/len(x)))"
   ],
   "id": "24856a4645bd1aa2",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                     count  mean   std   min   25%   50%   75%   max  nuniq  \\\n",
       "UserInfo_1       49988.000 3.218 1.833 0.000 1.000 3.000 5.000 7.000      8   \n",
       "UserInfo_3       49987.000 4.694 1.320 0.000 4.000 5.000 5.000 7.000      8   \n",
       "UserInfo_5       49999.000 1.650 0.583 1.000 1.000 2.000 2.000 3.000      3   \n",
       "UserInfo_6       49999.000 1.650 0.582 1.000 1.000 2.000 2.000 3.000      3   \n",
       "UserInfo_11      18394.000 0.086 0.280 0.000 0.000 0.000 0.000 1.000      2   \n",
       "UserInfo_12      18394.000 0.357 0.479 0.000 0.000 0.000 1.000 1.000      2   \n",
       "UserInfo_13      18394.000 0.641 0.480 0.000 0.000 1.000 1.000 1.000      2   \n",
       "UserInfo_14      49999.000 3.416 1.170 0.000 3.000 3.000 4.000 6.000      7   \n",
       "UserInfo_15      49999.000 3.419 1.167 0.000 3.000 3.000 4.000 6.000      7   \n",
       "UserInfo_16      49999.000 1.607 1.056 0.000 1.000 1.000 2.000 6.000      6   \n",
       "UserInfo_17      49999.000 1.126 0.332 1.000 1.000 1.000 1.000 2.000      2   \n",
       "UserInfo_21      49999.000 0.070 0.255 0.000 0.000 0.000 0.000 1.000      2   \n",
       "Education_Info1  49999.000 0.062 0.242 0.000 0.000 0.000 0.000 1.000      2   \n",
       "Education_Info5  49999.000 0.032 0.177 0.000 0.000 0.000 0.000 1.000      2   \n",
       "SocialNetwork_1  49999.000 0.001 0.038 0.000 0.000 0.000 0.000 2.000      3   \n",
       "SocialNetwork_2  49999.000 0.032 0.198 0.000 0.000 0.000 0.000 2.000      3   \n",
       "SocialNetwork_7  49999.000 1.946 0.321 0.000 2.000 2.000 2.000 2.000      3   \n",
       "SocialNetwork_12 49999.000 1.497 0.866 0.000 0.000 2.000 2.000 2.000      3   \n",
       "\n",
       "                  missing_pct  \n",
       "UserInfo_1              0.000  \n",
       "UserInfo_3              0.000  \n",
       "UserInfo_5              0.000  \n",
       "UserInfo_6              0.000  \n",
       "UserInfo_11             0.632  \n",
       "UserInfo_12             0.632  \n",
       "UserInfo_13             0.632  \n",
       "UserInfo_14             0.000  \n",
       "UserInfo_15             0.000  \n",
       "UserInfo_16             0.000  \n",
       "UserInfo_17             0.000  \n",
       "UserInfo_21             0.000  \n",
       "Education_Info1         0.000  \n",
       "Education_Info5         0.000  \n",
       "SocialNetwork_1         0.000  \n",
       "SocialNetwork_2         0.000  \n",
       "SocialNetwork_7         0.000  \n",
       "SocialNetwork_12        0.000  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "      <th>nuniq</th>\n",
       "      <th>missing_pct</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>UserInfo_1</th>\n",
       "      <td>49988.000</td>\n",
       "      <td>3.218</td>\n",
       "      <td>1.833</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>5.000</td>\n",
       "      <td>7.000</td>\n",
       "      <td>8</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_3</th>\n",
       "      <td>49987.000</td>\n",
       "      <td>4.694</td>\n",
       "      <td>1.320</td>\n",
       "      <td>0.000</td>\n",
       "      <td>4.000</td>\n",
       "      <td>5.000</td>\n",
       "      <td>5.000</td>\n",
       "      <td>7.000</td>\n",
       "      <td>8</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_5</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>1.650</td>\n",
       "      <td>0.583</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_6</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>1.650</td>\n",
       "      <td>0.582</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_11</th>\n",
       "      <td>18394.000</td>\n",
       "      <td>0.086</td>\n",
       "      <td>0.280</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_12</th>\n",
       "      <td>18394.000</td>\n",
       "      <td>0.357</td>\n",
       "      <td>0.479</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_13</th>\n",
       "      <td>18394.000</td>\n",
       "      <td>0.641</td>\n",
       "      <td>0.480</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_14</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>3.416</td>\n",
       "      <td>1.170</td>\n",
       "      <td>0.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>4.000</td>\n",
       "      <td>6.000</td>\n",
       "      <td>7</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_15</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>3.419</td>\n",
       "      <td>1.167</td>\n",
       "      <td>0.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>4.000</td>\n",
       "      <td>6.000</td>\n",
       "      <td>7</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_16</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>1.607</td>\n",
       "      <td>1.056</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>6.000</td>\n",
       "      <td>6</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_17</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>1.126</td>\n",
       "      <td>0.332</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_21</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.070</td>\n",
       "      <td>0.255</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Education_Info1</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.062</td>\n",
       "      <td>0.242</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Education_Info5</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.032</td>\n",
       "      <td>0.177</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_1</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.001</td>\n",
       "      <td>0.038</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_2</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.032</td>\n",
       "      <td>0.198</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_7</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>1.946</td>\n",
       "      <td>0.321</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_12</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>1.497</td>\n",
       "      <td>0.866</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 111
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:12.071722Z",
     "start_time": "2024-09-26T02:52:11.923464Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 先对所有字符型变量作去空格处理\n",
    "for col in data1.select_dtypes(include='O').columns:\n",
    "    data1[col] = data1[col].map(lambda x:str(x).strip())"
   ],
   "id": "8dd145c9474bc335",
   "outputs": [],
   "execution_count": 67
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:12.075861Z",
     "start_time": "2024-09-26T02:52:12.072723Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 计算各省份违约率\n",
    "def plot_pro_badrate(df,col):\n",
    "    group = df.groupby(col)\n",
    "    df = pd.DataFrame()\n",
    "    df['total'] = group.target.count()\n",
    "    df['bad'] = group.target.sum()\n",
    "    df['badrate'] = df['bad']/df['total']\n",
    "    # 筛选出违约率排名前5的省份\n",
    "    print(df.sort_values('badrate',ascending=False).iloc[:5,:])"
   ],
   "id": "a69b27d4c48277a1",
   "outputs": [],
   "execution_count": 68
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:12.085115Z",
     "start_time": "2024-09-26T02:52:12.076862Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 户籍地址\n",
    "plot_pro_badrate(data1,'UserInfo_19')"
   ],
   "id": "32a2e4676758c61c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             total     bad  badrate\n",
      "UserInfo_19                        \n",
      "天津市            137  17.000    0.124\n",
      "山东省           2382 258.000    0.108\n",
      "吉林省            502  47.000    0.094\n",
      "黑龙江省           818  73.000    0.089\n",
      "辽宁省            688  59.000    0.086\n"
     ]
    }
   ],
   "execution_count": 69
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:12.129046Z",
     "start_time": "2024-09-26T02:52:12.086116Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 西藏自治区的人数太少，不具有参考价值，剔除后再计算\n",
    "plot_pro_badrate(data1[~(data1.UserInfo_19=='西藏自治区')],'UserInfo_19')"
   ],
   "id": "e8f35716238671cf",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             total     bad  badrate\n",
      "UserInfo_19                        \n",
      "天津市            137  17.000    0.124\n",
      "山东省           2382 258.000    0.108\n",
      "吉林省            502  47.000    0.094\n",
      "黑龙江省           818  73.000    0.089\n",
      "辽宁省            688  59.000    0.086\n"
     ]
    }
   ],
   "execution_count": 70
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:12.138849Z",
     "start_time": "2024-09-26T02:52:12.130048Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 居住地址\n",
    "plot_pro_badrate(data1,'UserInfo_7')"
   ],
   "id": "181928d8af561dc",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            total     bad  badrate\n",
      "UserInfo_7                        \n",
      "山东           2068 228.000    0.110\n",
      "天津            185  20.000    0.108\n",
      "四川           1128 109.000    0.097\n",
      "湖南           1062 102.000    0.096\n",
      "海南            166  15.000    0.090\n"
     ]
    }
   ],
   "execution_count": 71
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.095716Z",
     "start_time": "2024-09-26T02:52:12.139851Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 户籍省份的二值化衍生\n",
    "data1['is_tianjin_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='天津市' else 0,axis=1)\n",
    "data1['is_shandong_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='山东省' else 0,axis=1)\n",
    "data1['is_jilin_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='吉林省' else 0,axis=1)\n",
    "data1['is_sichuan_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='四川省' else 0,axis=1)\n",
    "data1['is_heilongj_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='黑龙江省' else 0,axis=1)\n",
    "\n",
    "# 居住地址省份的二值化衍生\n",
    "data1['is_tianjin_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='天津' else 0,axis=1)\n",
    "data1['is_shandong_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='山东' else 0,axis=1)\n",
    "data1['is_sichuan_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='四川' else 0,axis=1)\n",
    "data1['is_hunan_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='湖南' else 0,axis=1)\n",
    "data1['is_jilin_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='吉林' else 0,axis=1)"
   ],
   "id": "857d3ec08a8447f3",
   "outputs": [],
   "execution_count": 72
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.103122Z",
     "start_time": "2024-09-26T02:52:17.097718Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 户籍省份和居住地省份不一致衍生\n",
    "data1.UserInfo_19.unique()"
   ],
   "id": "c2ebb7eb4273eea6",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['四川省', '福建省', '湖北省', '江西省', '辽宁省', '山东省', '内蒙古自治区', '湖南省', '黑龙江省',\n",
       "       '山西省', '江苏省', '云南省', '浙江省', '广东省', '天津市', '广西壮族自治区', '甘肃省', '贵州省',\n",
       "       '陕西省', '重庆市', '河北省', '青海省', '安徽省', '上海市', '吉林省', '北京市', '河南省',\n",
       "       '宁夏回族自治区', '新疆维吾尔自治区', '海南省', '西藏自治区'], dtype=object)"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 73
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.108752Z",
     "start_time": "2024-09-26T02:52:17.104122Z"
    }
   },
   "cell_type": "code",
   "source": "data1.UserInfo_7.unique()",
   "id": "741b15471f8a507b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['广东', '浙江', '湖北', '福建', '辽宁', '不详', '内蒙古', '湖南', '黑龙江', '山西', '北京',\n",
       "       '山东', '江苏', '云南', '天津', '广西', '重庆', '江西', '四川', '陕西', '贵州', '河北',\n",
       "       '青海', '甘肃', '安徽', '吉林', '新疆', '海南', '河南', '宁夏', '上海', '西藏'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 74
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.125701Z",
     "start_time": "2024-09-26T02:52:17.109753Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将UserInfo_19改成和居住地址省份相同的格式\n",
    "UserInfo_19_change = []\n",
    "for i in data1.UserInfo_19:\n",
    "    if i=='内蒙古自治区' or i=='黑龙江省':\n",
    "        j = i[:3]\n",
    "    else:\n",
    "        j=i[:2]\n",
    "    UserInfo_19_change.append(j)"
   ],
   "id": "2465c8ce73411bdb",
   "outputs": [],
   "execution_count": 75
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.172763Z",
     "start_time": "2024-09-26T02:52:17.126702Z"
    }
   },
   "cell_type": "code",
   "source": [
    "is_same_province=[]\n",
    "# 判断UserInfo_7和UserInfo_19是否一致\n",
    "for i,j in zip(data1.UserInfo_7,UserInfo_19_change):\n",
    "    if i==j:\n",
    "        a = 1\n",
    "    else:\n",
    "        a = 0\n",
    "    is_same_province.append(a)\n",
    "    \n",
    "data1['is_same_province'] = is_same_province\n",
    "\n",
    "# 删除原有的变量\n",
    "data1 = data1.drop(['UserInfo_19','UserInfo_7'],axis=1)\n",
    "data1.shape"
   ],
   "id": "91a051407ee4a73e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49999, 237)"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 76
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.292316Z",
     "start_time": "2024-09-26T02:52:17.173764Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将运营商信息转换为哑变量\n",
    "data1 = data1.replace({'UserInfo_9':{'中国移动':'china_mobile',\n",
    "                                     '中国电信':'china_telecom',\n",
    "                                     '中国联通':'china_unicom',\n",
    "                                     '不详':'operator_unknown'}})\n",
    "oper_dummy = pd.get_dummies(data1.UserInfo_9)\n",
    "data1 = pd.concat([data1,oper_dummy],axis=1)\n",
    "# 删除原变量\n",
    "data1 = data1.drop(['UserInfo_9'],axis=1)\n",
    "data1.shape"
   ],
   "id": "b427a001be2efe85",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49999, 240)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 77
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.302896Z",
     "start_time": "2024-09-26T02:52:17.293318Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 计算4个城市特征的非重复项计数，观察是否有数据异常\n",
    "for col in ['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20']:\n",
    "    print('{}:{}'.format(col,data1[col].nunique()))\n",
    "    print('\\t')"
   ],
   "id": "444a35930ff5ea27",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "UserInfo_2:330\n",
      "\t\n",
      "UserInfo_4:333\n",
      "\t\n",
      "UserInfo_8:664\n",
      "\t\n",
      "UserInfo_20:308\n",
      "\t\n"
     ]
    }
   ],
   "execution_count": 78
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.307963Z",
     "start_time": "2024-09-26T02:52:17.303897Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# UserInfo_8相对其他特征nunique较大，发现有些城市有\"市\"，有些没有，需要做一下清洗\n",
    "print(data1.UserInfo_8.unique()[:50])"
   ],
   "id": "cd2048c05ca7ed3f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['深圳' '温州' '宜昌' '南平' '辽阳' '不详' '包头' '广州' '赤峰' '鄂州' '武汉' '长沙' '漳州' '牡丹江'\n",
      " '太原市' '北京' '忻州' '三明' '临沂' '福州' '泰州市' '大同' '红河' '郴州' '常州' '湖州' '佛山' '天津'\n",
      " '南宁' '聊城' '柳州' '广州市' '太原' '重庆' '杭州' '景德镇' '上饶' '鸡西' '资阳' '成都' '济宁' '滨州'\n",
      " '渭南' '都匀' '廊坊' '西宁市' '金华' '龙岩' '清远' '兰州']\n"
     ]
    }
   ],
   "execution_count": 79
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.325533Z",
     "start_time": "2024-09-26T02:52:17.308964Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# UserInfo_8清洗处理，处理后非重复项计数减小到400\n",
    "data1['UserInfo_8']=[s[:-1] if s.find('市')>0 else s[:] for s in data1.UserInfo_8] \n",
    "data1.UserInfo_8.nunique()"
   ],
   "id": "6936a33750a0d61e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "400"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 80
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:52:17.382493Z",
     "start_time": "2024-09-26T02:52:17.326535Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 根据xgboost变量重要性的输出吧对城市作二值化衍生\n",
    "data1_temp1 = data1[['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20','target']]\n",
    "area_list=[]\n",
    "# 将四个城市变量都做亚编码处理\n",
    "for col in data1_temp1:\n",
    "    dummy_df = pd.get_dummies(data1_temp1[col])\n",
    "    dummy_df = pd.concat([dummy_df,data1_temp1['target']],axis=1)\n",
    "    area_list.append(dummy_df)\n",
    "\n",
    "df_area1 = area_list[0]\n",
    "df_area2 = area_list[1]\n",
    "df_area3 = area_list[2]\n",
    "df_area4 = area_list[3]"
   ],
   "id": "da0921cf65600954",
   "outputs": [],
   "execution_count": 81
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:56:59.904929Z",
     "start_time": "2024-09-26T02:56:53.697097Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用xgboost建模\n",
    "from xgboost.sklearn import XGBClassifier\n",
    "x_area1 = df_area1.drop(['target'],axis=1)\n",
    "y_area1 = df_area1['target']\n",
    "x_area2 = df_area2.drop(['target'],axis=1)\n",
    "y_area2 = df_area2['target']\n",
    "x_area3 = df_area3.drop(['target'],axis=1)\n",
    "y_area3 = df_area3['target']\n",
    "x_area4 = df_area4.drop(['target'],axis=1)\n",
    "y_area4 = df_area4['target']\n",
    "\n",
    "xg_area1 = XGBClassifier(random_state=0).fit(x_area1,y_area1)\n",
    "xg_area2 = XGBClassifier(random_state=0).fit(x_area2,y_area2)\n",
    "xg_area3 = XGBClassifier(random_state=0).fit(x_area3,y_area3)\n",
    "xg_area4 = XGBClassifier(random_state=0).fit(x_area4,y_area4)"
   ],
   "id": "b03d3d4c4d691bb3",
   "outputs": [],
   "execution_count": 100
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:56:51.711379Z",
     "start_time": "2024-09-26T02:56:51.706840Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "27e1e14c039559aa",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 99
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:57:21.540Z",
     "start_time": "2024-09-26T02:57:20.828458Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 输出变量的重要性\n",
    "from xgboost import plot_importance\n",
    "plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']\n",
    "fig = plt.figure(figsize=(20,8))\n",
    "ax1 = fig.add_subplot(2,2,1)\n",
    "ax2 = fig.add_subplot(2,2,2)\n",
    "ax3 = fig.add_subplot(2,2,3)\n",
    "ax4 = fig.add_subplot(2,2,4)\n",
    "plot_importance(xg_area1,ax=ax1,max_num_features=10,height=0.4)\n",
    "plot_importance(xg_area2,ax=ax2,max_num_features=10,height=0.4)\n",
    "plot_importance(xg_area3,ax=ax3,max_num_features=10,height=0.4)\n",
    "plot_importance(xg_area4,ax=ax4,max_num_features=10,height=0.4)"
   ],
   "id": "4f810f870554359b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Feature importance'}, xlabel='F score', ylabel='Features'>"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 2000x800 with 4 Axes>"
      ],
      "image/png": "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3mrevPk9xXU5PFbxiU73diALDAbJxcUok8ks5/svF1nBXEFmMVeQFcyXnFXA3SijOTHPjxsc3EcNGjRUo0aP6erVK5o1a5oqVKigadNm64svNsjDw0MBAdV07txZTZs2Uc8+20mvvz441TjR0VF6+eVOqlfvUXXp8op27/5Ry5cv0YIFH6l69ery8Sms8PDbac4VV1ejvL298uBskR35MW8iZ0J28HsM2cUcQk5gHiEnONM8slfeJGWcO7333lsqWbKUWrZso+joKM2bN0smk0krVnwio9F2AbWMcqfAwOrpHj+zeZPT3clz7tw5vfDCCxo8eLC6du2qixcvaujQoRo3bpyio6M1YMAANW/eXG3atNGbb76phIQEde7c+a7jurq6asSIEdq2bds9F3kmrAtT6KXYe9oXAAAAjmXh4MryssPV+LvvjpOvbylJUqVKlRUVFaXx499VXFycOnV60dqvcmV//f77YR04sC/Ncb75ZotMJrNGjnxHbm5uqlSpsvbs2a1Nmz5X9erpJypwDPk1byJnAgAAcC72ypukjHOn118fYm2TpJCQNzVgQG9duHBe5cpVsBkno9wpoyJPZjldkad8+fJatWqVXnvtNcXGxmrjxo1699139fjjj2vgwIFq3LixQkJCNHXqVMXExGjBggVyc3Oz7n/48GENHTrU+tpkMunatWs2Ccq3336r2bNnk9wCAAAg37kzEZEkDw93mc3mNPuazSY98ECRNNsOHTqgoKC6NtfKQUH19MMPO3MuWNgNeRMAAACcXUa503/b3N2Tl7g2mVLnVrmdOzldkUeSqlSpos8++0xubm768ssvdeHCBZlMJhkMBl29elUJCQmqUKGCvv32W/3zzz8qV66cdd9atWppxowZOnv2rCTp9u3bWrBggQYOHGjT5+GHH87z8wIAAACywmKxaMuWr1StWqA8PT2t2xMSEvTrr3u1c+cOvf/+xDT3vXTpoho2bGyzzdfXV9euXc3VmJF3yJsAAACAZOnlTik2b96okiV9VbZsuVRtuZ07OV2R56OPPlLRokXVqVMnSdKSJUvUpUsXlShRQrNmzVJwcLCGDBmihQsX6vbt23r55ZcVERFhTWZ++uknlS9fXiaTSUFBQanG37Jli+Lj40lWAAAAkCGDIfnLXpKSkjR9+mQdOnRA8+cvtcbSpUtHhYWdl5ubm/r3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d0nSl19+qTJlykiSxo8fL1dXV40aNSpnThYAACfQp88AGQwGXb58KVVbZGSkihYtmqlxDh06oKCgunJzc7NuCwqqpx9+2JlToQKAw8ipvOn27dsaNmyY3nrrLZ07d05Lly7VV199pSJFiqhfv37q0KGDEhIStH379kyN9987Nk+fPq1KlSpl+fwAAAAyI6N8807nz5/Tzp07tGrV+jTbyTfhCBzmmTxeXl765JNPNHz4cPn5+alcuXIqXLiwXnnlFW3atElly979k74pChcurGXLlmnMmDFycXGRq6trml+SZDQaZTQaVbJkSW3atCnNT77t3r1bHTp0yKlTBQDAKfz3WRF3ioy8pQMHflXLlk3UtevzWrhwrmJiYtLse+nSRfn5PWizzdfXV9euXc3ReAHAEeRU3jRq1Cg1bNhQNWvW1Pr163Xt2jUNGTJELVu2VHR0tD788EOtXLnSZp+kpCTFx8fbfKV8oO6bb76x9jt58qReeOEF/d///V+OnTcAAMCdMso377Rhw8eqW7d+mnfxSOSbcAwOcyfP6tWrFRQUpN69e6t37973PM6mTZvk4+OjJk2ayNvbW4cOHdKrr75q02fkyJF65ZVXrK/XrVunwMBAVa9uewtet27ddPLkSbm6ulpjiomJUa9evTRo0KB7jhEAgLyWyevfXD22wfDv9x06dFKrVm1ksVh07NgRLVu2WBcvhmnChKmp9o+NjZGnp6fNOXh6eioxMdGu53U/uvO9AjLCXLGfnMqbOnbsqCeeeELBwcFq3769jhw5oi+//FKDBw/W22+/rT179ig8PNxmnxkzZmj58uU223bt2iUp+YNx586dk6urq/r3769nn31Wbdu2vef4AABA/ndnjmfPGNKLJTo6St9+u01jx45PN878mm9yvY07OUyRZ9q0aZo1a5YeeeSRbI1TrFgxhYSEqH///urdu7fMZrMqV66sL7/8UpL07rvvKikpyWafAgUKqEePHnrttdfUr18/m7b58+erbt261tdLlixJtRQBAAD5XfHihe127Lg4L0lSkSIF5OOTHIePT1Vre5Mm9VWqlI9GjhwpozFRxYoVs9m/QAFPubkZrPtKkru7UZ6enjbbkHPsOV/gWJgreS+n8qYWLVroyJEjunLlilq1aqVRo0apY8eOunDhgvr27auoqCj5+/urWrVq1n06dOigEydOSJIuXbqkDh06yNfXV5Lk7e2t2bNn6/Dhw2rTpo1GjhyZrfgAAED+5+JilI9PQbvGkFa+mWL79q9VuHAhPfNMW7m4uKS5f37PN7nehuRARZ7HHntMP//8s1q2bJmtcR5//HGtWLFCkyZN0ksvvZSpfTp06KDKlSvr66+/lsFgUGJiotzd3SVJb7zxhvV7KXnt6u7du2crRgAA8tr167eVziPqcl1ERLQk6datWIWH306zT+nSFSRJf/xxSlWrVrNp8/Yurr//DrPZNzT0nPz8Hkx3PNwbgyE5ibDnfIFjuNtccXExytvbK+8DcwI5lTeZzWZNmDBBjz76qAwGg8qVK5fmnTyLFi1Sv379NGDAANWqVcu6/7fffqsnnnjCugx29+7dNXfuXHXr1o0CDwAATsJkMts9J8so39y8easaN35cERFpLw0u5d98k9zMOWQ2b3KYIs8LL7ygOXPmKDg4WG3atJGvr6+MRttHCtWrVy9TYwUGBurjjz/O0vEffvhhvfXWW5Kk6OhoeXkl/3A//PBD7uQBADg8i0V2uzBMOW5GMfz55x8yGo3y8yudqk+NGrW0ZctXSkoyWT99dfDgfgUF1eNiN5fYc77AsTBX8l5O5U2LFy/W6dOnVadOHUnSuXPn9PTTT+vy5cvq0aOHYmJibJa4vpPJZNInn3yi9957z7qtXLlyeu6553T69OlsnB0AAHAk+eFaML1889atmzpy5LC6deuZYYz5Pd/MDz9j2J/DFHn69+8vSfrzzz+t6zqnsFgsMhgM+uuvvzI93gcffKDnn38+0/2XL18ui8Wivn37KiEhQQULJt9qGBwcbP10mvTvM3kAAMC9W7x4vqpWfUSlSz+oP/88poUL56p9+44qUqSoJGn8+PdUtWo1der0op55poPWr/9Ys2ZNVceOnfXTTz8oNPS0xo6dYN+TAAA7yKm86cyZM+rXr58iIiJkMBjUqFEjzZw5U+PHj9drr72mM2fOKDY2Ns19N2/eLE9PTzVu3Nhm+5tvvql27dpp6dKl6tOnzz2eIQAAQPb9/vthWSwWBQbWSNVGvglH4zBFnkmTJuXYWPHx8fr000/1wgsvSJL++usv1a5d29o+fPjwVPscOnRIzzzzjEJDQ1WmTBkZDAa1adNGEydOlMFgUM+ePbVjxw7t2bMn1TN9AABA1hgMBk2bNlHR0dEqXfpB9ejRW88/38Xafu7cWXl7Jz+bp0SJkpoyZaZmzZqqrVu/1kMPPazp02erVCk/e4UPAHaTU3nTlClTtGnTJkVEROizzz7TmTNn1KFDB12+fFn79u2Ti4uLWrdunWq/iIgITZkyRePGjUvVVqRIEU2YMEHBwcEqU6aMnnzyyRyJFQAAIKtOnPhLZcqUtX6Q/07km3A0DlPkee6553JsrN9++01eXl4KCAjQkSNH1KBBA61cuTLd/mazWb///rveffdd/e9//5O/v78kqWLFilqwYIGCg4MlSUePHtVHH32kJUuW3FNco18qq/hE7q9D+gyG5LUYTSYzt2IiQ8wVZJbBIHl5usgUn2i3GPz8Smv37gM22/r2fV19+76e7j5Ll662eV27dpBWr96QK/EBgCPJqbzpziXeunTpoi5dumjPnj3q27evxo4dq8cffzzVPhaLRWPGjFHNmjXTfSZQ06ZNNWzYMA0fPlzx8fHq0KFDluIiZ0J2cI2M7GIOISc40zwq4G6UzCa7xpBWvilJffoMUJ8+A9Lch3wTjsZhijw56ZdfflGDBg1kMBhUs2bNDAs8knTq1Cm5urqqfPnyeuedd9ShQwdFRUXpvffes7nrJzAwUImJiZoxY4befPPNLMfl6WKWq8Wc5f3gPAwGycenoMLDeagaMsZcQWYZDJJ34YIKj4+zdygAgHwsNDRUI0eOVK9evTRy5Ei99NJLGjhwoE0xaO7cuTp8+LC++OKLVPsbDAbr9z179lRMTIxGjhwpd3d3PfXUU5mOg5wJ2cE1MrKLOYSc4FTzyM4FHsBZOEyRp0WLFhm2GwwGfffdd5kaa+fOnerevXuabcePH5ckxcbGKjQ0VAUKFNChQ4dUs2ZN7d27V3/88YcWLlyot956S0FBQWrdurWOHz8uNzc3GQwGTZ48WR06dFCrVq1sloADAAAAgNyWk3lTio0bN2rSpEkaNGiQunXrpk6dOmngwIF68cUXVbJkSd24cUPu7u7y9fXV/Pnz5evrq8uXLysuLk7R0dE6deqUvL29bcYMDg5WQECAmjZtmuVzBAAAAPAvhynylC5dOtW2mJgYhYaGysPDQwEBAZka5+rVqzp37lyqh4CmWLNmjb744gvrXT5169bVpk2b1KhRIx05ckRDhgxRoUKF9NJLL6lOnTp68cUXdfr0afXs2dMa56pVq6xLugEAAABAXsmpvOlOHh4eWrRokerUqSNJKl++vDZu3KiQkBD98ssvevjhh1WpUiVVq1bNus/27ds1efJkubq6qmnTpqpfv36qcdNb0g0AAABA5hksFse+MfDGjRsKCQlRly5dMv3gzps3b6po0aL3dDyLxWKz1EDKj+/ObfcqIiJaSUksPYD0Jd/SW9g5bulFtjBXkFnMFWQF8wWZdbe54upqlLe3V94H5sTuJW+KjY1VUlKSChcunGa72WyW2WyWq2vefXaQnAnZwe8xZBdzCDmBeYScwDxyDpnNm4x37ZHPFStWTCNHjtS8efMyvc+9Fnik1MUcg8GQIwUeAAAAAMgt95I3FShQIN0CjyQZjcY8LfAAAAAASM3hizxS8vIBFy5csHcYAAAAAJBvkTcBAAAA9x+HL/LcuHFD06dPV5kyZewdCgAAAADkS+RNAAAAwP3JYe6tb9GiRapt8fHxunHjhiwWiyZOnGiHqAAAAAAg/yBvAgAAAJyLwxR5SpcunWqbp6en/Pz81L59e9WtW9cOUQEAAABA/kHeBAAAADgXhynyrFmzxt4hAAAAAEC+Rt4EAAAAOBeHeSbPvHnzFBYWlmbb4cOH9emnn+ZxRAAAAACQv5A3AQAAAM7FYYo88+fP17lz59JsCw8P16RJk/I4IgAAAADIX8ibAAAAAOeSr5drCwsL0z///CNJslgsOnnypDw8PGz6xMTEaO3atfLy8rJHiAAAAABgV+RNAAAAgPPK10WegwcPatSoUTIYDDIYDJo2bVqqPhaLRZIUEhKS1+EBAIAccOrUSU2a9L6GDBmhmjVrSZIOHtyvIUMG2PRr1KiJpk79MM0xzpw5rRkzpuivv/5U8eI+6t27r9q2bZfLkQNA/kDeBAAAkLb/5puXL19S587t0+z72mv91aPHa6m2k28iv8vXRZ6WLVtq0qRJslgsevvtt9WzZ0/5+/vb9HF3d1flypVTbc/IkSNHVKNGjTTbnn76aY0ZM0YNGjRI1XblyhXFxsaqQoUK1m0dO3ZU9+7d1aFDh0wfPz1xJqPikwzZHgf3L4NBirsWJ5PJRf8/TwfSxFxBZhkMksvtRLsc+8SJ41q7dqX27PlZ8fHxNm2RkbdUokRJzZ272LrN07NAmuNER0cpJCRY9eo9qpCQN7V794+aOPF9lSlTToGB1XP1HAAgP3CmvImcCdnBNTKyizmEnOBM86iAu1FGc/7KN0uUKKn16zfa9A0LO69Ro4aqWbOWqcYh34QjyNdFnkKFCum5556TlPwA0RYtWqhu3brZGjMqKkr9+vVTx44dNWLEiCzt+/vvv2v06NEaMGCAevToIaPRKLPZLBcXl2zFlGLCujCFXorNkbEAAMispUMD5GmHv5f9+OMuubu7aerUD1PdtRMZGSlv72IqU6bsXcf55pstMpnMGjnyHbm5ualSpcras2e3Nm36nItuAE7BmfImciYAABzHwsGV5WWnvz6nl2+6urqmyjNXrFii5s1bqXz5CqnGId+EI8jXRZ477dq1K0fGKVSokObNm6cePXqoYMGCCg4OzvS+rVu3VtmyZTV48GD98MMPmjlzpiwWS44VeQAAcCZ9+gyQwWDQ5cuXUrVFRkaqaNGimRrn0KEDCgqqKzc3N+u2oKB6+uGHnTkVKgA4DPImAACAjPPNO50/f047d+7QqlXr02wn34QjcJgij5R82/+ePXv0zz//yGQy2bQZDIZMJx5BQUGaMGGCzGazwsLCJElly6b+pLDJZNJvv/2munXr6vr16ypevLiqVq2qzz//XJMmTZK7u7uSkpJkNBqzf3IAADgZgyH924ciI2/pwIFf1bJlE/n6llKTJk316qu9VbBgwVR9L126qIYNG9ts8/X11bVrV3M8ZgBwBORNAADA2WWUb95pw4aPVbdu/TTv4pHIN+EYHKbIs3fvXr3++uuKjY2VwWCwPjg0RWaTlevXr6tw4cJq3z75AVuzZs2SyWTS8OHDU/WNjo5W165ddeLECQ0aNEhFihTR2LFj5evrq8mTJ0uSkpKS5OrqMD9GAADSlMnr31w9tsHw7/cdOnRSq1ZtZLFYdOzYES1btlgXL4ZpwoSpqfaPjY2Rp6enzTl4enoqMTHRrud1P7rzvQIywlyxH/ImAACQX9yZ49kzhvRiiY6O0rffbtPYsePTjTO/5ptcb+NODnOVPWvWLPn5+emdd97Rxo0bVbBgQXXr1k27du3S5s2bNWXKlEyNM2fOHB05ckRz5sxJ81No6VmyZInGjh2rZ555RuPGjVObNm0kSbGxsSpQIO0HQQMA4CiKFy9st2PHxXlJkooUKSAfn+Q4fHyqWtubNKmvUqV8NHLkSBmNiSpWrJjN/gUKeMrNzWDdV5Lc3Y3y9PS02YacY8/5AsfCXMl75E0AACC/cHExyscn9WoMeSmtfDPF9u1fq3DhQnrmmbbpLiub3/NNrrchOVCR59SpUxo3bpwaNWqk48eP69ixY6pUqZIqVaqkyMhIffTRR5oxY8Zdxxk9erTGjBmjrl27aseOHZk+fqFChTR9+nStW7dOixcvVsuWLeXi4qK4uDh5enpm59QAALC769dv6z8f9s4zERHRkqRbt2IVHn47zT6lS1eQJP3xxylVrVrNps3bu7j+/jvMZt/Q0HPy83sw3fFwbwyG5CTCnvMFjuFuc8XFxShvb6+8D8wJkDcBAID8wmQy2z0nyyjf3Lx5qxo3flwRETHp7p9f801yM+eQ2bzJYYo8Xl5e1tv7y5Urp6+//traVqtWLa1bty5T47i7u2vKlCk6ffq0PDw8shzHSy+9pM6dO1uru1FRUXwiDQDg8CwW2e3CMOW4GcXw559/yGg0ys+vdKo+NWrU0pYtXykpyWT9/Xzw4H4FBdXjYjeX2HO+wLEwV/IeeRMAAMgv8sO1YHr55q1bN3XkyGF169Yzwxjze76ZH37GsD+HKfIEBATowIEDatu2rWrUqKGTJ0/qjz/+0COPPKIff/wxy58KS0pKynTfXr16af/+/am2WywWmUwmvfjii6nahg0bph49emQpJgAAkGzx4vmqWvURlS79oP7885gWLpyr9u07qkiRopKk8ePfU9Wq1dSp04t65pkOWr/+Y82aNVUdO3bWTz/9oNDQ0xo7doJ9TwIA7IC8CQAA4O5+//2wLBaLAgNrpGoj34SjcZgiz8svv6y5c+cqMjJSJUuWVNOmTfXiiy+qUKFCunXrVpoJQ3ouXLigDh06aO/evZnqv3z58jS3z5w5Uz/88IPNp+MAAED2GQwGTZs2UdHR0Spd+kH16NFbzz/fxdp+7txZeXsnP5unRImSmjJlpmbNmqqtW7/WQw89rOnTZ6tUKT97hQ8AdkPeBAAAcHcnTvylMmXKqmDB1M8MIt+Eo3GYIk+LFi3UokUL6+vp06dr0aJFOnXqlB555BH169cv02Pt3r1bNWrUkLe39z3Hs2HDBq1YsUKFChXSgAEDNHToUFWuXPmexwMAwFn5+ZXW7t0HbLb17fu6+vZ9Pd19li5dbfO6du0grV69IVfiAwBHQt4EAADwr7TyTUnq02eA+vQZkOY+5JtwNA5T5PkvLy8vDRs27J723bVrl5o1a2Z9bbFYbJYhMJvNSkpKkslkSrXvsWPHNHv2bP3222+aPXu26tevr6VLl+qFF15Q27ZtNXjwYPn53Vsld/RLZRWfyCKKSJ/BkPzALZPJzHqbyBBzBZllMEheni4yxSfaOxQAQC643/ImciZkB9fIyC7mEHKCM82jAu5GyZz6OgFAzjJYLI7zv5OEhAR99tlnOnbsmK5cuaK33npLlStX1vXr1+Xt7S2j0XjXMW7cuKHHHntMX375pQICAjRr1iwtWrQow3127typXbt2acuWLfrzzz/Vrl07DRs2TCVLlrT2+eeffzR58mTt2rVLXbt21ZAhQ7K83nVERLSSksxZ2gfOxWCQfHwKKzz89n1/IYDsYa4gs5gryArmCzLrbnPF1dUob2+vvA/MSdzPeRM5E7KD32PILuYQcgLzCDmBeeQcMps3OcydPOfPn1ePHj106dIlFS5cWFFRUbp9+7YkqXfv3urUqZO6det213H+/PNPlSlTRgEBAZKkkJAQhYSEpNk3MjJS9erV0zfffKONGzeqXbt2mj17dpqfOCtVqpQ+/PBD7d27V19//bU8PDyycbYAAAAAkHXkTQAAAIBzcZgiz+TJkyVJmzZtUtmyZRUUFGRte+aZZ7Rp06ZMJStNmjTRV199laljPvDAAzpx4oQkqW/fvpnap2HDhmrYsGGm+gIAAABATiJvAgAAAJzL3e/Tzyf27dunAQMGqEqVKjIYDDZt5cqV04ULFzI9VlaXUQMAAAAAR0DeBAAAADgXhynymM3mdG/lv337tuLi4vI4IgAAAADIX8ibAAAAAOfiMEWeOnXqaPny5YqJibFuS/lk2ubNm+Xv72+v0AAAAAAgXyBvAgAAAJyLwxR5QkJCdPbsWT3zzDNasmSJDAaDvvnmG/Xq1Uv/+9//1Lt3b3uHCAAAAAB2Rd4EAAAAOBeHKfIEBgZq+fLlKliwoBYtWiSLxaI1a9bo5MmTGjdunNq2bWvvEAEAAADArsibAAAAAOfiau8AMnLp0iX5+PjI3d1dkhQUFKTNmzcrLCxM165d0wMPPKCKFSumeqAoAAAAADgL8iYAAADAeeXrO3latGihX3/91fo6Pj5eXbt2VVxcnOrUqaNKlSqRqAAAAABwauRNAAAAgPPK10Uei8Vi89pkMungwYO6ffu2nSICAAAAgPyFvAkAAABwXvm6yAMAAAAAAAAAAIC0UeQBAAAAAAAAAABwQK72DuBuTp48KQ8PD0lSXFycJOmvv/6SyWRK1bdevXp5ElNiYqL69u2rkSNHqkqVKnlyTAAA7lenTp3UpEnva8iQEapZs5Yk6eDB/RoyZIBNv0aNmmjq1A/THOPMmdOaMWOK/vrrTxUv7qPevfuqbdt2uRw5AOQf+TFvAgAAsLf/5puXL19S587t0+z72mv91aPHa6m2k28iv8v3RZ5p06al2jZ+/Hib1xaLRQaDQX/99VeWxv7qq6/05ptvZthn4MCBGjRokM227du3KzQ0VBUrVszS8e4mzmRUfBIPREX6DAYp7lqcTCYX/WfpdcAGcwWZZTBILrcT7XLsEyeOa+3aldqz52fFx8fbtEVG3lKJEiU1d+5i6zZPzwJpjhMdHaWQkGDVq/eoQkLe1O7dP2rixPdVpkw5BQZWz9VzAID8IrfyptGjR6t+/fp69tlnM73PgQMHNH36dK1fvz7dPqNGjVLlypXVu3fvTI8rkTMhe7hGRnYxh5ATnGkeFXA3ymjOX/lmiRIltX79Rpu+YWHnNWrUUDVr1jLVOOSbcAT5usgzadKkXD9GjRo1tHbtWknJd+i4ublZ295++23r94MHD9b27dtt9g0MDMxw7EmTJqljx46ZjmXCujCFXorNdH8AAHLC0qEB8rTD38t+/HGX3N3dNHXqh6nu2omMjJS3dzGVKVP2ruN8880WmUxmjRz5jtzc3FSpUmXt2bNbmzZ9zkU3AKeQF3mTJPXr10+HDx9WQkKCEhMT5eXlZdP+7rvvql27djKZTIqNtc1r6tatq02bNqlMmTLZioGcCQAAx7FwcGV52emvz+nlm66urqnyzBUrlqh581YqX75CqnHIN+EI8nWR57nnnsv1YxgMBnl4eGjPnj0aP3681q5dq2LFilnbUsyYMUPTpk3TsWPH9Oqrr+q7776Tt7d3hmO7uubrHy8AAHbVp88AGQwGXb58KVVbZGSkihYtmqlxDh06oKCgujYf1AgKqqcfftiZU6ECQL6WF3mTJC1enHx35apVqxQaGqoPPvggT44LAACQVRnlm3c6f/6cdu7coVWr0r4DmXwTjsBo7wDyi4YNGyogIEB9+vRJ9akzSXJzc5OHh4e++uortWrVSqVKlZKHh4fOnTunDz74QB4eHqm+XFxc7HAmAAA4hjs/TPFfkZG3dODAr2rZsom6dn1eCxfOVUxMTJp9L126KD+/B222+fr66tq1qzkaLwA4k88++0yjR4/WwYMH9fnnn2v06NFKSEiQJF24cEF+fn52jhAAACB9GeWbd9qw4WPVrVs/zbt4JPJNOAZuNfn/DAaDJk2apKFDh+rKlSuqUKFCqj6xsbHaunWr5s2bZ90WERGhn3/+OQ8jBQAg52Xy+jdXj20w/Pt9hw6d1KpVG1ksFh07dkTLli3WxYthmjBhaqr9Y2Nj5OnpaXMOnp6eSkxMtOt53Y/ufK+AjDBXHF+RIkVUqlQpRUVFqVKlSipVqpTWrFmjJUuWKCoqSp6enlq5cqUkKS4uTsHBwerbt6+2bNmiIkWKSJLCwsLk5uamUqVKSUrOp44fP64qVarY67QAAEAeujPHs2cM6cUSHR2lb7/dprFjx6cbZ37NN7nexp2cssiTkJAgi8WipKQkWSwW68O3DAaDZs2aJUmKj4+39omPj5fRaNQ333wjb29v1a5d27pPYmKitf+djEajzW18AADkZ8WLF7bbsePikp/pUKRIAfn4JMfh41PV2t6kSX2VKuWjkSNHymhMtC6rmqJAAU+5uRms+0qSu7tRnp6eNtuQc+w5X+BYmCuOq3Xr1qpbt64WLVqkVq1a6dlnn5Uk9e7dW61atdKcOXNUtWry/6unT58uSTp//rzee+8964fiPvnkEyUkJGjMmDGSpMOHD2vZsmXatm2bHc4IAADkNRcXo3x8Cto1hrTyzRTbt3+twoUL6Zln2qa7IlN+zze53obkpEWe3r1769dff7W+rlGjRob9Fy1apIYNG6py5coKCwtTzZo1U/X57xgNGza0frINAID87vr127JY7HPsiIhoSdKtW7EKD7+dZp/SpStIkv7445SqVq1m0+btXVx//x1ms29o6Dn5+T2Y7ni4NwZDchJhz/kCx3C3ueLiYpS3t1feB4Ys2bZtm5KSknTo0CE99dRTcnNzU0JCgi5fvqyHHnooVf9ffvlFQUFBio+Pl6enp5599lm98sorGjFihCTp0Ucf1eLFi/W///0vr08FAADYgclktntOllG+uXnzVjVu/LgiItJeGlzKv/kmuZlzyGze5JRFnjVr1kiSZs+erQsXLmjatGlp9hs+fLjKly+vQYMGWbeNHj1aZrNZRmPy44z27dunESNG6Keffsr9wAEAyCUWi+x2YZhy3Ixi+PPPP2Q0GuXnVzpVnxo1amnLlq+UlGSyfvrq4MH9Cgqqx8VuLrHnfIFjYa44rsTERK1evVr169fXgQMH9MYbb+jAgQOSJC8vLzVt2jTVPlWqVFHLli0VGRmpwoULq0qVKipdurR27kx+MLHBYFCnTp20fv16FShQIE/PBwAA5L38cC2YXr5569ZNHTlyWN269cwwxvyeb+aHnzHsz2jvAOwpLCxMZcqUydI+oaGhevLJJ3XlypVUbatXr9ayZctyKjwAAJzW4sXz9dNPP+j06VP6+uuNmjfvQ7Vv31FFihSVJI0f/56++GKDJOmZZzooKipKs2ZN1Zkzp7Vy5TKFhp5W585d7HgGAODYPv74Y5UrV07lypVTnz599MQTT+inn37Svn370v2qW7euWrRooWvXrsnb21uSNH/+fLVt29Y6bpcuXfT222/b67QAAAAkSb//flgWi0WBgalXeCLfhKNxyjt5Uvz22282CcfdhIeHq0+fPmrevLl8fX1TtTdo0EC9e/fWzZs3NXz48JwMFQAAp2IwGDRt2kRFR0erdOkH1aNHbz3//L8X0efOnZW3d/KzeUqUKKkpU2Zq1qyp2rr1az300MOaPn22SpXys1f4AODwjh49qhEjRmjlypUyGAzq3LmzLly4oFatWumBBx6w6ZuUlKRq1apZV0w4evSoatWqJUkqW7asTd+U4g8AAIA9nTjxl8qUKauCBVM/M4h8E47GaYs8x48f15UrV1S/fv1M9Y+JiVG/fv3k7++vt956K80+AQEB+uSTT9SjRw/dvHlT77//froP7UrL6JfKKj6R++uQPoMheS1Gk8nMrZjIEHMFmWUwSF6eLjLFJ9otBj+/0tq9+4DNtr59X1ffvq+nu8/SpattXteuHaTVqzfkSnwA4Iw++OADeXmlXv/bz89Pu3btstm2b98+zZs3T5JkMpl04MAB9erVK1fiImdCdnCNjOxiDiEnONM8KuBulMwmu8aQVr4pSX36DFCfPgPS3Id8E47GaYs8ixYtUuvWrVN9Ci0yMlIxMTEymUw6ceKE/P39JUmjRo1SgQIF9OGHH8psNuv06dN64IEHtH//fpuKb7ly5bRq1Sp1795dy5cvV58+fTIdk6eLWa4Wc86cIO5LBoPk41NQ4eE8VA0ZY64gswwGybtwQYXHx9k7FABAPpJWgSczduzYIW9vb9WokXrpk5xAzoTs4BoZ2cUcQk5wqnlk5wIP4CycssgTFhamX375RevXr0/VdvDgQQ0YMEAWi0UlSpRQ8+bNJUldu3bVI488Ik9PTyUlJalTp05KTExUwYIFNWLECJsxypYtq08++UTFihXLk/MBAAAAgLxw+fJlNWjQwGZbynJtMTExmj17tvr372+n6AAAAADn45RFnrJly2rHjh0qWrRoqrZmzZrpr7/+UmJiotzd3a3b70xkXF1ddezYMZlMpnSXY/PzY11GAAAAAPeXjJZr27Fjh6pVq6Znn33WTtEBAAAAzsdgsdz3NwY6jIiIaCUlsfQA0pd8S29h57ilF9nCXEFmMVeQFcwXZNbd5oqrq1He3ve2HBjsx2w26/bt2ypSpIjN9sTERMXFxalw4cIym80yGo25FgM5E7KD32PILuYQcgLzCDmBeeQcMps3OeWdPAAAAACArDEajakKPJLk5uYmNzc3ax8AAAAAeYcrcAAAAAAAAAAAAAdEkQcAAAAAAAAAAMABUeQBAAAAAAAAAABwQBR5AAAAAAAAAAAAHBBFHgAAAAAAAAAAAAdEkQcAAAAAAAAAAMABUeQBAAAAAAAAAABwQBR5AAAAAAAAAAAAHBBFHgAAYOPUqZPq1aurfv/9cJrtv//+m5o0qauVK5elO8aZM6cVHNxHzZs3VufOz2rbtq25FC0AID9KTExUz549dfz4cXuHAgAAnNh/89vLly+pSZO6aX6ll+OS3yK/c7V3APnF5cuXVbRoURUoUCDDfnFxcfrss8/UrVu3HI8hzmRUfJIhx8fF/cNgkOKuxclkcpHFYu9okJ8xVxxfAXejjObEPD3miRPHtXbtSu3Z87Pi4+PT7GOxWLRgwZwMx4mOjlJISLDq1XtUISFvavfuHzVx4vsqU6acAgOr50boAIBc8tVXX+nNN9/MsM/AgQM1aNAgm23bt29XaGioKlasmKPxkDMhO7hGRnYxh5ATnGke2SOvTZFefluiREmtX7/Rpm9Y2HmNGjVUzZq1TDUO+S0cAUWe/++tt97S008/reeffz7Dfh4eHvr6668VEBCg+vXrS5KuXLmib775Rrdv39bNmzd19uxZhYaGav369SpdunSmY5iwLkyhl2KzdR4AgPvDwsGV5ZXHv6V//HGX3N3dNHXqhxoyZECafTZv3iSz2Sxf31LpjvPNN1tkMpk1cuQ7cnNzU6VKlbVnz25t2vQ5F8EA4IBq1KihtWvXSkq+Q8fNzc3a9vbbb1u/Hzx4sLZv326zb2BgYIZjT5o0SR07dsx0LORMAAA4DnvktSnSy29dXV1VpkxZm74rVixR8+atVL58hVTjkN/CEThtkSc+Pl41atTQQw89ZN22bNkyLVu2zKZPmTJltGbNGn322WdasmSJtW306NGSpBIlSmjIkCH6+OOP1blzZ1WpUkWPP/64/Pz85OPjk3cnBABANvXpM0AGg0GXL19Ksz08PFyLF8/TjBnz9M476X+q+9ChAwoKqmvzR8CgoHr64YedOR4zACD3GQwGeXh4aM+ePRo/frzWrl2rYsWKWdtSzJgxQ9OmTdOxY8f06quv6rvvvpO3t3eGY7u6Om1KCgAActHd8tsU58+f086dO7Rq1fo028lv4Qic+oraxcVF27ZtS7f9wIEDmj17tiSpc+fOun79umrWrKmGDRtKkoYOHar+/fsrIiJC5cuXV79+/fIkbgAAcsOdf6j7L4vFogkT3lOrVm1VpUrVDMe5dOmiGjZsbLPN19dX165dzZE4AQD20bBhQwUEBKhPnz5au3ZtqqWuU/748dVXX6lVq1YqVSr5rs+TJ09q1apVmjBhQp7HDAAAnFNG+e2dNmz4WHXr1k/zLh6J/BaOwamLPCaTSW3btk23PeVOnhS1atXSe++9p//7v//Tli1bFBoaqgoVKigiIiIvwgUAOBGDIfkrL45z57//3Zby/ccfr9LVq1c0ZcqMNNvvFBsbI09PT5s2T09PJSYm5sk5IfekNV+AtDBX7k8Gg0GTJk3S0KFDdeXKFVWoUCFVn9jYWG3dulXz5s2zbouIiNDPP/+ch5ECAID8IK/y2rvFkF4s0dFR+vbbbRo7dny6cebX/JbrbdzJqYs8d7uT5+zZs9b2qVOn6tatWypevLjGjBmjH374QRUrVtT777+v6tVZfxEAkLNcXIzy8SmYZ8crXryw9fu4OC9JUpEiBeTjU1g///yzVq1arvXr1+vBB0tY4ytY0EM+PoVTjVWggKfc3Aw2be7uRnl6eqbZH47nzvkCZIS54rgSEhJksViUlJQki8VifWCxwWDQrFmzJCV/KC6lT3x8vIxGo7755ht5e3urdu3a1n0SExOt/e9kNBptlj4BAAD3l7zOa9Py3/z2Ttu3f63ChQvpmWfaysXFJc3983t+y/U2JCcv8tztTh5Jun79unr37q1q1aopNjZWtWrVUnh4uF5//XW5u7tLkgoUKKB9+/apQYMGSkpKUlxcnAoVKqSmTZtq6tSpeXEqAID7jMlkVnj47Vw/jsGQfFF4/fptWSzJ2yIioiVJt27FKjz8tubPX6i4uDg9//zz1v0SEhI0b948LVy4UN9/v8dmTG/v4vr77zCb+ENDz8nP78E8OSfknrTmC5CWu80VFxejvL298j4wZFrv3r3166+/Wl/XqFEjw/6LFi1Sw4YNVblyZYWFhalmzZqp+vx3jIYNG2rlypU5Ei8AAMh/8iqvzch/89s7bd68VY0bP66IiJh098+v+S25mXPIbN7k1EWeu93JI0nVq1eXxWLR008/bd3Wo0cPDRw4UHXr1pUk7d27Vw0bNtTSpUu1b98+zZs3T2vWrMnV2AEA9zeLRXl6oXbn8e7812KRRo9+X/HxcTb9hwwZoGbNWqpDh06p4qxRo5a2bPlKSUkm66ehDh7cr6Cgelx83ifyen7CcTFXHFdKPjN79mxduHBB06ZNS7Pf8OHDVb58eQ0aNMi6bfTo0TKbzTIajZKkffv2acSIEfrpp59yP3AAAJBv5Idrwf/mtylu3bqpI0cOq1u3nhnGmN/z2/zwM4b9OXWRx2w2KyQkJMM+SUlJkqSVK1dq9erVkqTw8HC98cYbcnd3V4kSJdSnTx8VKlQo1+MFAMAeUh6cfSdXV1cVKVLE+nDK8ePfU9Wq1dSp04t65pkOWr/+Y82aNVUdO3bWTz/9oNDQ0xo7lgduA4CjCQsLU9myZbO0T2hoqF5//XWtXr1avr6+Nm2rV69WQkKCXnvttZwMEwAAIEt+//2wLBaLAgNT361MfgtH47RFHqPRqOeee07du3e3blu2bJm8vb3VqVMn67aCBQvKaDSqR48eqlGjhh5++GG98cYbCg4OVtGiRVW5cmWtW7dOxYoVs8dpAACQL5w7d1be3sm/C0uUKKkpU2Zq1qyp2rr1az300MOaPn22SpXys3OUAICs+u233+66xPWdwsPD1adPHzVv3jxVgUeSGjRooN69e+vmzZsaPnx4ToYKAACQaSdO/KUyZcqqYMHUzwwiv4Wjccoiz7hx46xLBRw4cMC6PSIiQi4uLvrxxx9t+j/11FNq1qyZ/u///k8LFiyQJF24cEGDBw/WF198oT/++EO1a9fOdlyjXyqr+ETur0P6DIbktRhNJjO3YiJDzBXHV8DdKJlNdjm2n19p7d59IMM+n3++2eb10qWrbV7Xrh2k1as35HhsAIC8c/z4cV25ckX169fPVP+YmBj169dP/v7+euutt9LsExAQoE8++UQ9evTQzZs39f7776f7oOO0kDMhO7hGRnYxh5ATnGke2TOvTZFeftunzwD16TMgzX3Ib+FonLLIM2bMmDS3T5gwQSVKlFDfvn1Tta1evVpVqlRR9erVJUlly5bViy++qFWrVumHH37Q66+/nu24PF3McrWYsz0O7l8Gg+TjU1Dh4TxUDRljrtwH7HwhDADAokWL1Lp1az3wwAM22yMjIxUTEyOTyaQTJ07I399fkjRq1CgVKFBAH374ocxms06fPq0HHnhA+/fvt/mUbLly5bRq1Sp1795dy5cvV58+fTIdEzkTsoNrZGQXcwg5wanmEXktkCecsshzL6KjozVkyBCZzWbdvHlTrq6uCg4O1rp161SrVi2VLl3a3iECAAAAQI4ICwvTL7/8ovXr16dqO3jwoAYMGCCLxaISJUqoefPmkqSuXbvqkUcekaenp5KSktSpUyclJiaqYMGCGjFihM0YZcuW1SeffMKy1wAAAEA2UeTJpAEDBmjmzJnq0qWLypYtq8qVK8vNzU27d+/W2LFj7R0eAAAAAOSYsmXLaseOHSpatGiqtmbNmumvv/5SYmKi3N3drdsbNGhg/d7V1VXHjh2TyWRKdzk2Pz/WsgcAAACyy2Cx3Pc3BuYos9kso9GYK2NHREQrKYmlB5C+5Ft6CzvHLb3IFuYKMou5gqxgviCz7jZXXF2N8vb2yvvA4PDImZAd/B5DdjGHkBOYR8gJzCPnkNm8KXeqFfex3CrwAAAAAAAAAAAAZAUVCwAAAAAAAAAAAAdEkQcAAAAAAAAAAMABUeQBAAAAAAAAAABwQBR5AAAAAAAAAAAAHBBFHgAAAAAAAAAAAAdEkQcAAAAAAAAAAMABUeQBAAAAAAAAAABwQBR5AAAAAAAAAAAAHBBFHgAAYOPUqZPq1aurfv/9cJrtv//+m5o0qauVK5elO8aZM6cVHNxHzZs3VufOz2rbtq25FC0AAAAAwBGkl2vGxMRo9uwZat++jZo3b6RevbqmOwa5JpCaq70DyA86duyot99+W3Xr1pUkbd26VVu3btWCBQusfSwWi/7880898sgj9goTAIBcdeLEca1du1J79vys+Pj4NPtYLBYtWDAnw3Gio6MUEhKsevUeVUjIm9q9+0dNnPi+ypQpp8DA6rkROgAAAAAgn8oo1zSZTHrzzTcUGxurd955X8WL++j06ZNpjkOuCaSNIk8mnTlzRr169dKgQYP0yiuvaNCgQfr+++/l4eEhV1fbH2NkZKSmTJmi9u3bZ+kYcSaj4pMMORk27jMGgxR3LU4mk4ssFntHg/yMueL4CrgbZTQn5ukxf/xxl9zd3TR16ocaMmRAmn02b94ks9ksX99S6Y7zzTdbZDKZNXLkO3Jzc1OlSpW1Z89ubdr0ORfeAOCgFi9erKNHj2revHkZ9ktMTJSbm1uuxUHOhOzgGhnZxRxCTrDXPLJHjpkio1xz69avFRp6Wp9++pUKFy4sSapYsVKa45BrAmlzyiLPW2+9pS1btlhfJyYmqkePHjIYkpMFi8Uik8mk6tX//Z9Dv379tHLlSvXs2VOFChXS3LlztXLlSh06dEhz5vz7ieavv/5ac+fOVfPmzbMc14R1YQq9FJuNMwMA3C8WDq4srzz+Ld2nzwAZDAZdvnwpzfbw8HAtXjxPM2bM0zvvvJnuOIcOHVBQUF2bP/IFBdXTDz/szPGYAQB5w2w2W/Ol9ERFRal9+/YaNmyY2rVrZ82r0mMwGOTi4pKlOMiZAAC4N/bIMVNklGt+881mPf30s9YCT0bINYG0OWWRZ9KkSZo0aZL1dWaWa0vx6aefys/PT5LUtWtXbdq0SfPnz1dwcLA+++wzffjhh1q8eLEKFSqUNycDAEAOyeiPdxaLRRMmvKdWrdqqSpWqGY5z6dJFNWzY2Gabr6+vrl27miNxAgDyXmJioozGjB/pWqhQIY0bN04hISHav3+/KlSoYJN3/ZeLi4v+/PPPnA4VAADkM+nlmklJSTpx4i81b95KI0eG6MiR31W69IPq2/d1NWjQMFV/ck0gbU5Z5JGkAwcO6OrVq3rqqac0bdo0lSr177IzTZo0sbmLR5I+++wzVatWzeaZPG5ubvroo4/UpUsXbd26VUlJSVq7dq0eeuihPDsPAADywscfr9LVq1c0efKMu/aNjY2Rp6enzTYPD08lJtpnaQAAQNatW7dOY8eOTbU9ICDA+n3RokW1b98+m/bGjRvrs88+0969e9WlSxf16NHDpm327NnWD9cBAADnFhl5S4mJifriiw3q1q2HXn21t77+eqNGjgzR6tUbVK5ceZv+5JpA2py2yFOgQAEtWrRIe/bska+vr5YvX55mv5iYGBUoUECvvfaaJk6cqA8++EDPPPOMwsLC9L///U+bN29WZGSk6tSpo3379mn69Olq3bq1HnnkET300ENZXn4AAAApeZ3mu6yKk2PHufPf/24zGKR9+/Zq1arlWrx4uc0FdXoxuru7KzEx0aYtMTFBHh6eeXJOyD1pzRcgLcwVx9e5c2ebZ4xOmjRJRqNRI0eOlCQdPXpUQ4YMsdnnu+++U/ny5VW5cmWVL2/7RxkAAGBfeZVj3i2GO2Mxm5OXdW3btp2eeaaDJCkgoIr27t2tnTu/Va9efWz2J9f8F9fbuJNTFnnWrVun6Ohoffrpp9q6das6dOigQYMGpdm3QYMG+vTTT1W+fHkFBATok08+kdFo1KhRo1S/fn09/fTTWrBggTZt2qQPPvhAGzZs0IYNG3T06FEtW7ZMDRo0yOOzAwDcD1xcjPLxKZhnxyte/N/1j+PivCRJRYoUkI9PYa1fv0bx8XF67bXu1j4JCQlasWKZVq1arqNHj9qMVbq0nyIjb8jH598xb9+OULlyZW22wXHdOV+AjDBXHJerq6tcXf9NF2NjY1WmTBl5eSX/jvjvp2gl6cyZMxo+fLgGDBig1157jQ+8AQCQj+R1jpmW/+aahQu7y2g0qmrVyja5Yrly5RQbeztV/kiumRrX25CctMjTpEkTDR48WEeOHNGcOXMkSXXr1rVJQnr06KEBAwbY7NeqVSu1atVKZrNZTzzxhDXBif9/7N15nI3l/8fx9zmzMiaGYSxjCc1E9n1rG2VPIkkhS9YRoYwSya5EyJItS4qyVUgLUULK3mKXfRsGM2PWc87vj/k5X8eZYcY5M2eOeT0fj3nkXPd23XOujvvtc+7rTkjQqFGj1KFDB/Xt21d9+/ZVYmKivL29s+6kAAD3FZPJrMjI6Ew/jsGQclF4+XK0LJaUtqioWEnStWtxioyMVkTEcCUkxNts169fbz355FN67rk2dv0sV66C1qz5WhcuXLX+3frrr7+pSpXqWXJOyDypjRcgNXcbKx4eRgUE+GV9x3DPrly5okqVKt1xnR49eqhq1ap64403VL9+fVWoUCGLegcAAO4mqzLmndyeNSUpJORhbd/+h+rWfUJSynMA//vvhB57LIyseQdks5whvbkpRxZ5ihcvrs8//1z79u1TdHS0/P39FR0drb///luenp6aMWOG4uPj7ba7cOGCvvvuO3Xu3Fnh4eH6999/bZbfetdOgwYN9OGHd39uAQAAqbFYlKUXarce79b/WixSUFBhu/U9PT2VN29elShRShaLNHr0uypXrrzatGmnFi1a6YsvlmjSpPfVunVb/fLLJh09ekQjRozh4vM+kdXjE+6LsXL/OH36tIoVK3bX9WrWrKkff/yRL7wBAJDNZIfrstuzpiS1b99BY8aMUKlSD+rhhx/RV199LovFosaNm5M10yE7vK9wvRxZ5JFSnslz7do19ejRQ1988UW6ttm+fbtWrFihzp07a8GCBdb2hIQEVapUye6howAA5BQnThxXQEB+SVLBgoU0YcIkTZ78vtau/UYPPlhaEydOUeHCRVzcSwDAvbh48aJOnTql0NDQdK2/evVqNWjQQEWLFs3kngEAAHfXsGEjXbt2TYsXL9CVK5dVrtwjmjRpmh544AFJZE0gPXJskUeSZs2apbZt21pf169fX1JK0eaVV16xW3/nzp2qXbu2Jk6cqK+++spu+e3P3xk+fLiaN2/u5F4DAJC5ihQpqi1b/rzjOsuXf2vzes6cRTavq1atrkWLljm9bwCArLd69WqFhoaqePHiaa5z+PBhFSpUSF5eXho3bpw++OADijwAAMBGWlmzdeu2at26bSpbkDWB9MixRZ6ffvpJUVFRatOmjSTpkUce0VdffXXHh4Nu3bpVERERevrpp/XGG29Y2511J8/Q9sWVkMT9dUibwZAyF6PJZOZWTNwRY8X95fI2SmaTq7sBAMjhoqKiNH/+fPXv3/+O661cuVIxMTGqXbu2fH199fjjj2dKf8hMcATXyHAUYwjO4KpxRMYE7l85ssiTlJSkDz74QL169bLOFb1y5Urr8gsXLsjHx0dnz55VdHS0cuXKpcOHD+v06dOqUaNGpvXL18MsT4s50/YP92cwSIGBuRUZyUPVcGeMlfsAF98AABczmUx6++23FRQUpBdeeOGO60ZGRqpUqVJatmyZWrZsKS8vr0zpE5kJjuAaGY5iDMEZXDaOyJjAfStHFnlOnz6tgIAAtW7dOtXlEyZM0Nq1a+Xl5aWWLVuqUKFCOnr0qMLCwhQQEJDFvQUAAACArJWQkKC3335be/bs0bJly+xmPMidO7eio6N17Ngx+fr6aufOnSpZsqR27Nihd955R7///rs6depkt9+XX37Z7vXw4cMz9VwAAACA+1mOLPI8+OCDWrp0aZrLJ02apEmTJtm01a1bV3Xr1k11fR8fHx08eNCpfQQAAAAAV5k6dar27t2rBQsWqESJEnbLH3roIT355JNq2bKlLBaLateurbp16+rQoUMKDQ2VJDISAAAAkAVyZJEHAAAAAJC2/v37q0ePHsqbN2+qyw0Gg6ZPn27XXr169czuGgAAAIBbUOQBAAAAANjw9va2Pr8UAAAAQPZldHUHAAAAAAAAAAAAkHEUeQAAAAAAAAAAANwQRR4AAAAAAAAAAAA3RJEHAAAAAAAAAADADVHkAQAAAAAAAAAAcEMUeQAAAAAAAAAAANwQRR4AAAAAAAAAAAA3RJEHAAAAAAAAAADADVHkAQAANg4fPqSuXV/W3r17Ul2+d+9uNWhQQwsWzE1zH8eOHVF4eHeFhdVX27bPav36tZnUWwAAAABARqWW+3bu/EMNGtSw+Rk8+PU090HuA7IHT1d3wFUaN26sTz/9VEWLFr2n7X/88UdJ0tNPP+20PsWbjEpINjhtf7j/GAxS/KV4mUweslhc3RtkZ4wV95fL2yijOSlLj3nw4AF99tkCbd36qxISElJdx2KxaMaMqXfcT2xsjAYMCFfNmnU0YMBgbdmyWWPHvqfg4BKqUKFiZnQdAJCF9u3bp4sXL+qpp55K1/ovvPCC2rZtq7Zt2zp8bDITHME1MhzFGIIzGAySR3TWZr1b3Sn3Xb9+TQULFtK0aZ9Y23x9c6W6H3IfkH3k2CKPxWKR0ZhyI1NYWJiuXbsmg8E+LCQkJGj//v02bbt27dKbb76pMWPGOLVPY744paNn45y6TwCAe5rZ7yH5ZfHf0ps3b5S3t5fef/8j9e/fO9V1vv12tcxms4KCCqe5n3Xr1shkMisi4h15eXmpbNmHtHXrFq1evZyLfQBwE3v27NHcuXM1ZcoUeXh42CxLTEzU8OHDVa9ePeXOnTtL+0VmAgDcD+YMDJWvi76zcKfcd/36dQUE5FdwcPG77ofcB2QfObbIYzabrUUeSVq/fr0KFiyoyMhI+fr6Kk+ePJKkihVtP5SOHj2qPn36aPDgwWrevLm1ffLkyXr++edVvPjdPwQBAMiOunfvLYPBoHPnzqa6PDIyUp988rE+/PBjvfPO4DT3s2vXn6pevYa8vLysbdWr19SmTRuc3mcAQOYIDQ3V4cOH9fHHH6to0aIaOXKkzfLExETVqlXL5otyvXv3Vp8+fbK6qwAAIAPulPuuX7+ufPnypWs/5D4g+8hxRZ5169apTp06MplMMhgMmjt3rsxms3X51KlTVatWLbVo0cJu23379qlXr17q06ePXnrpJZtlfn5+euWVV7R48WIVK1Ys088DAABnS+2O1pssFovGjHlXTz/dRA8/XO6O+zl79ozq1q1v0xYUFKRLly46pZ8AgMyXK1cuffDBB3rppZf05Zdf2s1ukJaFCxfqkUceUY0aNe643oIFC1ShQoW7rgcAAJzrTrnv+vVr+vPPHXrqqQYKCiqsBg0e1yuvdEv1zl1yH5B95Lgiz65duxQXFyeTyaQdO3Zo48aNNnf0JCcn27y+acOGDXr77bf1zjvv6JlnnrFZPz4+Xq1bt9bx48f1yiuv6LPPPlPhwmlPYwMAwN0YDCk/WXGcW/97e9vNPy9ZslAXL17QhAkfprr8VnFxN+Tr62uzzNfXV0lJSVlyTsg8qY0XIDWMlftDpUqVtGbNGpUqVUpbt25VeHh4muv269dPXbp00U8//SRvb++7Fm++//57+fj4UOQBAORYrr5OSi3XtWrVRk8/3VgWi0V//bVPc+d+ojNnTmnMmPfttif3uRbX27hVjivy1KtXTytWrFBiYqJWrlypjh076oMPPtDs2bO1atUqxcfH67vvvtPw4cPVoUMHSdLq1asVERGh3Llza/LkyRo3bpzi4+OVkJAgs9ksX19f5c6dW7lypTyI7OYdPYUKFXLlqQIA3JiHh1GBgVn3nIMCBfytf46P95Mk5c2bS4GB/vr111+1cOF8LV26VMWKFbT2L3duHwUG+tvtK1cuX3l5GWyWeXsb5evrm+r6cD+3jhfgThgr7q9UqVKSUr7cVqFCBS1evNhunTFjxigpyXUPkAYAwB25+jrp9twnSYGB/5u1oUGDWipcOFAREREyGpOUP39+m+3JfdmDq8cRsoccV+SpUaOGfvzxR8XGxqpYsWJ6+umn9cEHH6hHjx4aOnSoOnfurP79+6tq1aqSpHnz5qlu3bqKiIhQ+fLl9cADDyhPnjzy8/OzKezcZDKZ9PLLL+vLL79U3759XXGKAID7gMlkVmRkdKYfx2BIuSi8fDlaFktKW1RUrCTp2rU4RUZGa/r0mYqPj9fzzz9v3S4xMVEff/yxZs6cqZ9/3mqzz4CAAvrvv1M2/T969ISKFCmWJeeEzJPaeAFSc7ex4uFhVECAX9Z3DAAAIJtw9TX17bkvNUWLlpIk/f33YZUrV95mGbnPtchmOUN6c1OOK/I88MADeu+99/TDDz/YPTzUYrHoyJEjmj9/viZMmGCdbzIoKEhdu3ZN1/49PDw0Y8aMdD+kDACA1FgsytILtVuPd+t/LRZp6ND3lJAQb7N+//699eSTT6lVqzZ2/axUqYrWrPlayckmeXh4SJJ27vxD1avX5OLzPpHV4xPui7Hi/t5991116tTJ1d0AAOC+4+rrpNtzX2r++edvGY1GFSlSlNyXTbl6HCF7yHFFHkk6duyYPD09lZCQIB8fH2v79u3bVbJkSRUoUECzZs3SwIEDbbYLDQ29677r1q2rBQsWOLvLAAC4TGrPmfP09FTevHlVsmQpSdLo0e+qXLnyatOmnZ55ppWWLl2iyZPfV+vWbfXLL5t09OgRjRgxJot7DgBwxIULF7Rs2TJ16tRJxYoVU4ECBawzHty4cUO5cuWSwWBQlSpVFBYW5uLeAgAAR33yyXSVK/eIihYtpn/++UszZ05Ty5atlTdvPknkPiC7ypFFngMHDigxMVFDhw7VxIkTJaXMMT1x4kR1795dtWrVUvPmzW2mpblp8+bNqf5jlyStXLlS33zzTab2HQCA7OjEieMKCEiZo7lgwUKaMGGSJk9+X2vXfqMHHyytiROnqHDhIi7uJQAgI3766SeVL19eZcqUkSSVL19ew4cPV/78+VWxYkX9+OOPunLlio4ePaq6deu6uLcAAMBRBoNBH3wwVrGxsSpatJg6d+6m559/0bqc3AdkTzmyyLNx40YNHDhQa9eutT44dNmyZSpVqpSaNGkiSerRo4cOHjyYpf0a2r64EpK4vw5pMxhS5mI0mczciok7Yqy4v1zeRslscsmxixQpqi1b/rzjOsuXf2vzes6cRTavq1atrkWLljm9bwCArPPtt9+qZcuWkqQVK1Zo0aJFat26tc06CQkJGjZsmIKDg1WpUqVM7xOZCY7gGhmOYgzBGQwGyc/XQ6aEJJf2I7Xc16NHH/Xo0SfNbch9QPaU44o8kZGR2rx5s4YMGaK6detqxYoVkqT27dvbPEenS5cuWd43Xw+zPC3mLD8u3IfBIAUG5lZkJA9Vw50xVu4DLirwAAAgSYcOHdK+ffs0bdo07dq1S2PHjtXs2bMVGBhos16lSpU0YMAAvfbaa1q1apUkyWQyKSEhwbqOxWJRcnKyXdu9IDPBEVwjw1GMITiDwSAF+OdW5G3PPQWAe5XjijwfffSRHnvsMRUtWlSSFBERoe+//17NmjWTwWC46/Z3mmvaYrGodu3aTusrAAAAALjCypUrVadOHeXNm1fPPfec+vXrp0qVKun69eu6evWqkpKSrM837dChg7Zu3ar3339fkjRq1CiNGjXKZn/79u3TiBEjbNqeffbZLDkXAAAA4H6W44o89erVU8WKFe3a169fr4IFC9q1377uxo0beSYPAAAAgPta3759dfbsWXl7e+uTTz7RI488oitXrqhu3boyGo1q1KiRHnjgAev6Y8aMUUJCQppZ6Xbt27fPrK4DAAAAOYrBcq/3ycPpoqJilZzM1ANIW8qt4f7cGo67YqwgvRgryAjGC9LrbmPF09OogAC/rO8YHGYymWQwGGQ0Gl1yfDITHMHfY3AUYwjOwDiCMzCOcob05qYcdycPAAAAAODeeHh4uLoLAAAAAG7hmq9fAQAAAAAAAAAAwCEUeQAAAAAAAAAAANwQRR4AAAAAAAAAAAA3RJEHAAAAAAAAAADADVHkAQAAAAAAAAAAcEMUeQAAAAAAAAAAANwQRR4AAAAAAAAAAAA3RJEHAAAAAAAAAADADVHkAQAAAAAAAAAAcEMUeQAAAAAAAAAAANwQRR4AAAAAAAAAAAA3RJEHAAAAAAAAAADADVHkAQAAAAAAAAAAcEMUeQAAAAAAAAAAANyQp6s7gP/x8KDmhvRhrCC9GCtIL8YKMoLxgvRKa6wwhnCvGDtwBsYRHMUYgjMwjuAMjKP7W3rfX4PFYrFkcl8AAAAAAAAAAADgZJT6AAAAAAAAAAAA3BBFHgAAAAAAAAAAADdEkQcAAAAAAAAAAMANUeQBAAAAAAAAAABwQxR5AAAAAAAAAAAA3BBFHgAAAAAAAAAAADdEkQcAAAAAAAAAAMANUeQBAAAAAAAAAABwQxR5AAAAAAAAAAAA3BBFHgAAAAAAAAAAADdEkceFLBaLPv74YzVo0EBVqlRReHi4rly54upuIRtavny5QkNDbX5Gjhzp6m4hmzlw4ICee+45/fnnnzbtn3/+ucLCwlSpUiV16tRJp06dclEPkV2kNla2bdtm9znTs2dPF/YSrnTgwAF17dpVlStXVv369fXWW28pKirKupzPFdzqTuOFzxY4A7kJjiJPwRHkLDiK/AVHkM2QHp6u7kBONnfuXC1evFjjxo1Tvnz59M477ygiIkJz5sxxddeQzVy7dk2VK1fWBx98YG3z9/d3YY+Qnfz999+aPXu2Nm3apPj4eJtl3333ncaNG6dRo0apbNmyGjt2rHr37q1vvvlGRiN1/pzmTmPl2rVrCgoK0uLFi61tuXLlyuouIpsYNWqUHn30UQ0ePFjnz5/XqFGjFBERodmzZ/O5Ajt3Gi98tsAZyE1wFHkK94KcBUeRv+AMZDOkB0UeFzGbzZo3b5569+6tsLAwSdKQIUPUvXt3nTp1SsWLF3dxD5Gd3PzLv2TJkq7uCrKhH374Qd7e3po1a5Y6d+5ss2z27Nlq166dWrVqJSnl4qBZs2basWOH6tSpk/WdhUvdaaxcu3ZNgYGBfM5AkjRx4kQVKVJEkvTwww8rOjpagwcPVlxcHJ8rsHOn8cJnCxxFboIzkKdwL8hZcBT5C85ANkN6UNJzkUOHDikqKkqPPvqota1WrVoyGo3au3evC3uG7Ojq1asKCAhwdTeQTb3++uv64IMP7P6R4/r16/rnn3/02GOPWdvKlCmjggUL8jmTQ6U1VqSUkMHnDG66GSJu8vHxkdls5nMFqUprvEh8tsBx5CY4A3kK94KcBUeRv+AMZDOkB0UeF7k5P+KtH/S+vr7Knz+/zp8/76puIZu6evWqli9frqpVq+qZZ57RnDlzlJSU5OpuIZswGAyptp8+fVqSFBwcbNNetGhRPmdyqLTGiiRFRUVp69atqlKlipo2baqJEycqNjY2C3uH7MpisWj58uWqXLmyLl++LInPFaTt1vGSK1cuPlvgMHITnIE8hXtBzoKjyF9wNrIZ0sJ0bS4SGxsro9Eob29vm3ZfX18lJia6qFfIrvr166fevXsrMTFR27Zt07Rp03TlyhVFRES4umvIxm7cuCHJfl5fPmeQmvbt26tFixayWCzas2ePpk6dqpMnT2rq1Kmu7hpcKCkpSe+9955+//13ffbZZ3yu4I5uHy8Sny1wHLkJzkCegjNxPQRn4BoJGUU2w51Q5HERb29vmc1mJScny9Pzf29DQkICD1qDnbJly1r/XLlyZZlMJs2dO1eDBw++4zdDkLPd/MeQ27+lmJiYyOcM7JQoUcL65woVKihPnjyKiIjQlStXlD9/fhf2DK5y/vx5vf766zp9+rQWLlyoihUrat++fZL4XIG91MaLxGcLHEdugjOQp+BM5Cw4A9dIyAiyGe6G6dpcJCgoSJJsbp9LTExUVFQUDw/FXT3yyCO6ceOGoqKiXN0VZGM3P2fOnTtn037u3Dm723mB2z3yyCOSpDNnzri4J3CF48ePq23btvLz89PXX3+tKlWqSOJzBalLa7ykhs8WZBS5CZmBPAVHcD2EzMA1EtJCNkN6UORxkUceeUS+vr7aunWrtW3Hjh0yGAyqUaOGC3sGd7Bv3z7lzZtX+fLlc3VXkI0FBQWpWLFiNp8zx48f1/nz51W3bl0X9gzuYN++fTIajVwc5lCDBg1S1apVNWfOHBUoUMDazucKUpPWeEkNny3IKHITMgN5Co7gegiZgWskpIVshvRgujYX8fX1Vfv27TV16lQVKVJEuXPn1pgxY9SuXTsuNGFn1KhRevzxx1WoUCFt3bpVc+fO1WuvvSajkTot7qxLly6aNGmSHn74YQUHB2vcuHF68sknFRoa6uquIZuZPHmyKlasqODgYO3bt08TJ05Uu3btFBAQ4OquIYsdP35cf//9t3r06GF94PlN+fPn53MFNu42XubOnctnCxxCboIzkKfgbFwPwVHkL6QH2QzpRZHHhQYOHKj4+Hi9/vrr8vDwUMuWLTV48GBXdwvZ0I0bN/Tmm28qISFBpUqV0siRI9WqVStXdwtuoEOHDrpy5Yree+89JSQkqGHDhho+fLiru4Vsavjw4YqJiVHx4sXVp08fdezY0dVdggtERkZKkvr372+3bNiwYXyuwMbdxovEZwscR26Co8hTcDauh+AMXCPhbshmSC+DxWKxuLoTAAAAAAAAAAAAyBjuTQYAAAAAAAAAAHBDFHkAAAAAAAAAAADcEEUeAAAAAAAAAAAAN0SRBwAAAAAAAAAAwA1R5AEAAAAAAAAAAHBDFHkAAAAAAAAAAADcEEUeAAAAAAAAAAAAN0SRBwAAAAAAAAAAwA1R5AEAAAAAAAAAAHBDFHkAAG5v5syZqlq1qr799ltXdwUAAAAAsiVyEwDcnzxd3QEAgK3Q0NA0lz388MP6+uuvs6QfZrNZcXFx8vPzy5Lj3WrlypV66623Ul22YcMGBQcH27SdO3dON27c0IULF7Kiey4XExOjPHnyuLobAAAAgMvk9NyU0cwkkZsA4H5FkQcAsiEvLy+98MILdu2FCxfOkuMvX75ckydP1qBBg9S6dessOWZq3njjDbvwFhgYaLfeiBEj1KdPnyz7/bjKjRs31L17d128eFE//vijq7sDAAAAuBS5Kf2ZSSI3AcD9iiIPAGRDXl5eGj58uMuO/88//ygyMtJlx7+pUqVKql279l3XMxqNLg8qZrNZRmPmzoIaHx+vP//8U8WKFcvU4wAAAADugNyU/swkuT43ZUVmkshNAHIenskDAHAJs9ns9H3+9ddf6tOnj+rWratKlSqpRYsW2r9/v80633//vV566SVVrVpVVapUUZs2bXTu3Dnr8gMHDqhfv36qU6eOKlSooLCwMI0fP14xMTE2+wkNDdWQIUO0ZMkS1alTR88995x12dq1a/Xcc8+pYsWKql+/vkaOHKkbN27c0zllxu8JAAAAgHtwdh64HzOTRG4CkLMZLBaLxdWdAAD8T2hoqHLnzq3du3ffdV2TyaQlS5Zo+fLlOn78uHLnzq0aNWqoX79+drfs79+/X0uWLNGOHTt08eJF+fj4qFq1ahowYIDKly8vKX3zOoeFhenMmTPatm2b8ufPb7NOz549tWnTJi1atMj6bbLff/9dnTp10hNPPKHBgwdr+PDh2rt3r9q3b6+hQ4dKkq5evapZs2bphx9+0MWLF5UrVy5dv35dH374oZ588knr/j08POTr62vXt5EjR2rJkiXy9PTUww8/rC5duujo0aOaMWOGKleurI8//lgTJkzQTz/9pPj4eBUoUEA9evRQwYIFtWLFCl26dEknT56Ut7e3YmJiVKRIEXXp0kUFCxbUnj17tGDBAlksFg0aNEhNmzbV5MmTtXbtWhkMBvn4+KhNmzaqXbu2GjdurPnz52vChAlq1KiRnnzySX3zzTfavn27jEajvLy8VKJECTVr1kydO3dWrly5Un3vt2zZouHDh2vjxo0qUaKEvv76a+vv/XbPPfecxo8fn+73WJJOnz6thg0b6qGHHtLKlSv18ccf69tvv9WlS5dUokQJ9erVSy1btrQ7VmJiopYtW6Zvv/1WR48eVXJysooWLapXXnlFL774onW929/P/Pnzq2HDhnrttdfsxgwAAABwL3J6bjp//rxMJpOeeOIJDRs2TAEBAZLSzkySNHjwYH399dcqVqyYBg4cKIPBoO+//17ff/+9nnjiCY0aNUqvvvqqDh48KA8PD5UvX15t27bV/v37Va5cOa1evVoHDhxQYmKi/Pz8FB4ermLFimnPnj1avHixAgICdOnSJQ0ePFiNGjXSU089JQ8PD5nNZhUrVkwNGzbU22+/bZOZmjZtqsOHD2v27NnKlSuXTCaTzGYzuYncBCADmK4NANyUyWRSeHi4fv75ZwUHB6tp06aKjIzUhg0btHXrVi1ZssTmArVr165KTk5WrVq1VK9ePR04cEC//PKLdu3apbVr16pw4cIqU6aMXn75Zf3xxx86dOiQ6tatq9KlS0uSww+sTE5OVs+ePVW4cGG1bNlSRYsWlSRduHBBHTt21IkTJ1SxYkXVrl1b27dv1/Xr1zVo0CCbfVSrVk1ffPHFHY/Rp08fNWzYUL///rtmzJghT09Pvfzyy/L391d8fLy8vb11+fJlfffdd+rUqZO2b9+uevXqqUyZMvr+++9lNptVoUIFdezYUZLUpEkTHT9+XJs2bdKWLVs0b948FSpUyHrMhIQELVmyRKVLl9aFCxc0adIkPfXUUxo2bJheeeUVHTt2TAEBAYqKitKjjz6qAwcO6KOPPtKPP/6oxYsXp/qA1hEjRuivv/5Ss2bNZDAYJEmtWrXShQsXtHz5cvn5+alVq1aSpMqVK1u3S897fCuz2azevXvrv//+U82aNXXy5Ent3r1bb775pvz9/W0KbDExMerWrZv27Nmj/Pnz64knnpCHh4f++ecf/fLLL9awktr7eeDAAX3++efatm2bli9fzsNPAQAAkGXu19xUuHBh7dy5U5s2bdKmTZus298pM12+fFmSFBYWphYtWkhKeX7P999/r+joaL3wwgs6d+6cihQpoqSkJO3fv18eHh7q1KmT3nzzTdWrV0/e3t5KSkpSbGys/vnnH3Xr1k1NmjTRgw8+aJ0678yZM3r++eclpWSOKlWqaM+ePVq4cKHy5cunGTNm6KmnntK0adN08eJFTZs2TcnJyYqOjlbDhg2VJ08e/f777+QmchOA9LIAALKVkJAQS5UqVe663ieffGIJCQmxDBgwwJKQkGBtX7t2rSUkJMTSvn17m/VnzJhhiY6Otmnr37+/JSQkxPLxxx/btL/33nuWkJAQy4oVK+yO++STT1pCQkIsly9ftlvWo0cPS0hIiGX79u3Wtu3bt1tCQkIsjzzyiGXUqFF223Tt2tUSEhJiWbhwobVt+fLllpCQEEtISIhl8ODBlj/++MPyxx9/WA4cOJDq7+Jmf8uVK2dp2rSp5ccff7Rs3brVuo9p06ZZpk+fbgkJCbFs27bNUqtWLWufVq9ebbFYLJaTJ09a1y9XrpwlKirKuv/Jkydbl82aNctisaS8T506dbL89NNPltDQUEulSpUsCxYssISEhFg2b95s6dSpkyUkJMTy7rvvWv7880/r7zMhIcHSq1cvS0hIiN3vIyQkxPLwww9bXnjhBUt8fLzdeV6+fNkSEhJiefLJJ1P9PaT3PT516pT1fHr27GlzrJEjR1pCQkIsr7zyis1+Bg4caAkJCbH06dPHEhsba7Ps2LFj1j+n9n6azWbLiBEjLCEhIZbJkyen2ncAAAAgI3J6blqxYoW1/7fmprQyk8Visbz55puWkJAQS/369S0//vijJTk52XrckJAQS8eOHS0hISGWf//913Lp0iW73HQzMw0ZMsQSGhpqk5sSEhIsoaGhlpCQEEtoaKhl1qxZ1sxksVisuemRRx6xZqaYmBhrbrr5O775uyQ3TU617wCQGp7JAwDZ0I0bNxQaGmr3s3LlSkmSxWLRggUL5Ofnp9GjR8vb29u6bbNmzfTggw9q586dunLlirW9d+/edt8Eatq0qSTp8OHDmX5ORqNRffr0sWk7fPiwtmzZotq1a6tTp07W9pvfwpJSHmZao0YN1ahRw24qhdv16NFD+fPnV3h4uAYOHChJCggIUI8ePaxzSFeuXFmNGzeWJFWoUEHPPvusJOnixYuSpKJFi8pkMunIkSPW/Xp4eEiS/P391bNnT2t7UFCQGjZsqIYNGyo+Pl5//PGHJKl79+7avn27JOmLL77QSy+9JEk6f/68vL29NWzYMHl5eWnFihVKSkqyOYeb3xLz8fG547mmJqPvscFg0HvvvWdzrM6dO0tK+b3fdOrUKa1du1YFCxbUxIkTlTt3bpv9PPjgg9ZjpPV+3nzvN2zYkOHzAgAAAFKT03OTJL3yyiuS/peb7pSZbp5Xnjx5FB4eroYNG+qHH36QlJKbgoODJUklS5ZUYGCgXW66mZkqVqyoRx55xCY3eXt7W6eJq1q1qjU3BQUFSZI1N93MP927d1e1atWsuem7776TlJKZbu6P3AQA6cN0bQCQDXl5eemFF16way9Tpowk6dixY7p8+bIKFSqkiRMn2q0XFxcnKWUO4Vvn8v3777/1xx9/6Pjx4zp9+rSOHTsmSYqPj8+M07BRunRpu3mF//zzT0kp4WzkyJHW9qNHj0pKucg9efJkuo9RokQJvf766zpy5IhGjRql7du3y8/PT97e3taL+IsXL1qnPLj1lv18+fJJkjX4xcbGWpeZTCZJUpEiRWyOZzQarfv56aefrA8KffbZZ63zQXfr1s26/s3jFi1aVCVLltSRI0d0/PhxhYSE2Oy3evXq6T7n22XkPS5cuLA1dN1UrFgxeXh46Pr169a2HTt2yGKxqFGjRnbzYd8qrffzpoy+nwAAAMCd5OTcdDMzffPNNxm+zu7Ro4cqVaqkGTNm6LPPPpMklS1bVnnz5pWUkplKlixpl5tuZqYLFy4oKChIf/31lzU3JSYmWn8/derUsR7rZma6uZ+ffvpJkjR27FgdOXJE8+fPt8lNN49588/kJgC4O4o8AJANeXl5WeczTs3Vq1clpVx8L1myJM31bl6gRkZGasCAAdqxY4d8fX0VGhqq4sWLq1q1ajp79qwsFotT+5+aggUL2rXdPI/9+/dr//79dsstFss9BamyZcuqT58+2r59u7XwUr9+fc2fP18LFy5UsWLFJNnOl126dGkFBwdb7/gxm83WZf/++6+klG+spebm/NA3z/HWb7jVqFHDei633qFUsGBBHTlyRDExMTb78vX1lb+/f4bP+V7e49TmeDYajfLx8bH+3iTp0qVLkmTzLKLU3O39lLImGAMAACBnIDfJWjRJz3X2rf0vW7asJk2apJ9//lk3btyQn5+fTWYaPny4vLy8JP0vN9zMTCtXrlSVKlUk/S83rVy50rr/AgUKpHr8W5+rc/78eT3wwAOS/pebbs9MN38f5CYAuDOKPADghm5eHFepUkXLli276/pjx47Vjh071Lt3b4WHh1sv1rds2aI1a9Zk6Ng3L7oTEhLslt16gXu7W7/BddPN8+jRo4cGDRpkbV+5cqXeeustLVq0SLVr105335YsWSKTyaSAgADred38tlmDBg3UqFEjLVmyxPoNsAMHDmjgwIHq2bOnQkNDNXz4cOu0Aj///LMSEhK0d+9e/fLLL5JkfZjq7c6ePSspJSi1bNlS3377rSTpjz/+0Nq1a3Xo0CHt3r1bixYtsm4TGRlp0787/Z7Sw5nv8e1uTrtwc+qEtKT1fgIAAACucD/npnvJTMePH5eUklMeeOAB7dy506Yvt2amyMhIeXqm/LPh999/r0aNGlkzU58+fbRlyxZJ0s6dO7Vjxw4tXrxYpUqV0n///ZfqOUv/y03lypXT9OnTrV+i++OPPzR58mS7zCSRmwAgPXgmDwC4odKlS8vHx0eHDx+2+0ZTan777Td5eHiob9++1otYKaXIkZqbgeTmNGW3unkL/+23jycmJurQoUPpPgcp5eJekvbs2ZOh7dISHR2t8ePH680337TOjVy8eHHr8smTJ2vgwIHWb1ht2bJFycnJ1m/LPf7449apBb7++mu98cYb2rx5szU0/f3333bHNJvN2rhxo6SUuafHjRuntm3bSpK2bt2qMWPGaM+ePda5sqWUi/7//vtPBQoUsM7LnB53el8y+h5nRIUKFazHSExMTHM9Z7+fAAAAgCPITan3ae3atXrzzTe1fft2m5wi/S8zHTx40PqcHLPZbJOZFi9ebH3ezPz587V582b169dPzZo1kyT99ddfdse+NTe99dZbCg8PtxZDtm/frl27dtn1hdwEAOlDkQcA3JC3t7eaN2+u2NhYvfvuu3a3cp86dUo7duywvvby8pLJZLIJE8ePH9fcuXNT3f/NOaBvzkt8q5sXrgsWLLC5aP7oo4+st52nV/Xq1VWiRAnt2LHD5htbrVu31sGDB2U0GnXq1Kl0769Xr17auXOndu/erVGjRkmSze3+np6e6tmzp7p37y5JevXVVzV16lSbOa8DAgKs5/PXX39p3bp11rme169fb50O4eDBgxo/frzmzZunY8eOKSQkRNWrV5enp6dGjRqlSpUqSZKeeeYZffrpp2rYsKGklGf9jBgxQklJSercubPddAR3kjdvXnl5eeny5cu6du2azbKMvscZUb16dYWGhurkyZOaMGGCzftuNputxa+03s+b/vjjjwy9nwAAAIAj7ufcdDMz1a5dO93X2TenURsxYoR2796tVatWWXPKTTcz0/fff6833nhDktS0aVObzFStWjXVqlVLkjR9+nStW7dOPXr0sN5dczM33cxMkmxyU61atRQeHq7NmzerUqVK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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 101
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:57:45.510277Z",
     "start_time": "2024-09-26T02:57:39.553232Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 城市变量的二值化\n",
    "data1['is_zibo_UserInfo2'] = data1.apply(lambda x:1 if x.UserInfo_2=='淄博' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo2'] = data1.apply(lambda x:1 if x.UserInfo_2=='成都' else 0,axis=1)\n",
    "data1['is_yantai_UserInfo2'] = data1.apply(lambda x:1 if x.UserInfo_2=='烟台' else 0,axis=1)\n",
    "\n",
    "data1['is_zibo_UserInfo4'] = data1.apply(lambda x:1 if x.UserInfo_4=='淄博' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo4'] = data1.apply(lambda x:1 if x.UserInfo_4=='成都' else 0,axis=1)\n",
    "data1['is_weifang_UserInfo4'] = data1.apply(lambda x:1 if x.UserInfo_4=='潍坊' else 0,axis=1)\n",
    "\n",
    "data1['is_zibo_UserInfo8'] = data1.apply(lambda x:1 if x.UserInfo_8=='淄博' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo8'] = data1.apply(lambda x:1 if x.UserInfo_8=='成都' else 0,axis=1)\n",
    "data1['is_shantou_UserInfo8'] = data1.apply(lambda x:1 if x.UserInfo_8=='汕头' else 0,axis=1)\n",
    "\n",
    "data1['is_zibo_UserInfo20'] = data1.apply(lambda x:1 if x.UserInfo_20=='淄博市' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo20'] = data1.apply(lambda x:1 if x.UserInfo_20=='成都市' else 0,axis=1)\n",
    "data1['is_weifang_UserInfo20'] = data1.apply(lambda x:1 if x.UserInfo_20=='潍坊市' else 0,axis=1)"
   ],
   "id": "43e1480a1fd81b0c",
   "outputs": [],
   "execution_count": 102
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:58:13.436402Z",
     "start_time": "2024-09-26T02:58:12.346611Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将四个城市变量改成同一的格式\n",
    "data1['UserInfo_20'] = [i[:-1] if i.find('市')>0 else i[:] for i in data1.UserInfo_20]\n",
    "# 城市变更次数变量衍生\n",
    "city_df = data1[['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20']]\n",
    "city_change_cnt =[]\n",
    "for i in range(city_df.shape[0]):\n",
    "    a = list(city_df.iloc[i])\n",
    "    city_count = len(set(a))\n",
    "    city_change_cnt.append(city_count)\n",
    "data1['city_change_cnt'] = city_change_cnt\n",
    "# 删除原变量\n",
    "data1 = data1.drop(['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20'],axis=1)\n",
    "data1.shape"
   ],
   "id": "7e2d9472fd13166b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49999, 249)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 103
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:58:37.758528Z",
     "start_time": "2024-09-26T02:58:37.659428Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将字符型的nan转为众数\n",
    "for col in ['WeblogInfo_19','WeblogInfo_20','WeblogInfo_21']:\n",
    "    data1 = data1.replace({col:{'nan':np.nan}})\n",
    "# 将缺失填充为众数\n",
    "for col in ['WeblogInfo_19','WeblogInfo_20','WeblogInfo_21']:\n",
    "    data1[col] = data1[col].fillna(data1[col].mode()[0])"
   ],
   "id": "13bcf222d2723e87",
   "outputs": [],
   "execution_count": 104
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:58:44.632717Z",
     "start_time": "2024-09-26T02:58:44.607142Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 微博变量的哑变量处理\n",
    "data1['WeblogInfo_19'] = ['WeblogInfo_19_'+s for s in data1.WeblogInfo_19]\n",
    "data1['WeblogInfo_21'] = ['WeblogInfo_21_'+s for s in data1.WeblogInfo_21]"
   ],
   "id": "14a0134fe0af58be",
   "outputs": [],
   "execution_count": 105
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T02:58:54.045640Z",
     "start_time": "2024-09-26T02:58:53.966354Z"
    }
   },
   "cell_type": "code",
   "source": [
    "for col in ['WeblogInfo_19','WeblogInfo_21']:\n",
    "    dummy_df = pd.get_dummies(data1[col])\n",
    "    data1 = pd.concat([data1,dummy_df],axis=1)\n",
    "# 删除原变量\n",
    "data1 = data1.drop(['WeblogInfo_19','WeblogInfo_21','WeblogInfo_20'],axis=1)\n",
    "data1.shape"
   ],
   "id": "eb7984e3428767fa",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49999, 257)"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 106
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:07:08.730129Z",
     "start_time": "2024-09-26T03:07:07.267078Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 数值型变量的缺失率分布\n",
    "import missingno\n",
    "num_col = list(var_info2[var_info2.变量类型=='Numerical'].变量名称)\n",
    "missingno.bar(data1.loc[:,num_col])"
   ],
   "id": "f38c06ab8c606ea3",
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "The number of FixedLocator locations (0), usually from a call to set_ticks, does not match the number of labels (189).",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[112], line 4\u001B[0m\n\u001B[0;32m      2\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mmissingno\u001B[39;00m\n\u001B[0;32m      3\u001B[0m num_col \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mlist\u001B[39m(var_info2[var_info2\u001B[38;5;241m.\u001B[39m变量类型\u001B[38;5;241m==\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mNumerical\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39m变量名称)\n\u001B[1;32m----> 4\u001B[0m missingno\u001B[38;5;241m.\u001B[39mbar(data1\u001B[38;5;241m.\u001B[39mloc[:,num_col])\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\missingno\\missingno.py:266\u001B[0m, in \u001B[0;36mbar\u001B[1;34m(df, figsize, fontsize, labels, log, color, inline, filter, n, p, sort, ax)\u001B[0m\n\u001B[0;32m    264\u001B[0m ax3\u001B[38;5;241m.\u001B[39mset_xticks(ax1\u001B[38;5;241m.\u001B[39mget_xticks())\n\u001B[0;32m    265\u001B[0m ax3\u001B[38;5;241m.\u001B[39mset_xlim(ax1\u001B[38;5;241m.\u001B[39mget_xlim())\n\u001B[1;32m--> 266\u001B[0m ax3\u001B[38;5;241m.\u001B[39mset_xticklabels(nullity_counts\u001B[38;5;241m.\u001B[39mvalues, fontsize\u001B[38;5;241m=\u001B[39mfontsize, rotation\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m45\u001B[39m, ha\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mleft\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[0;32m    267\u001B[0m ax3\u001B[38;5;241m.\u001B[39mgrid(\u001B[38;5;28;01mFalse\u001B[39;00m)\n\u001B[0;32m    269\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m ax \u001B[38;5;129;01min\u001B[39;00m axes:\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\matplotlib\\axes\\_base.py:73\u001B[0m, in \u001B[0;36m_axis_method_wrapper.__set_name__.<locals>.wrapper\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m     72\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mwrapper\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs):\n\u001B[1;32m---> 73\u001B[0m     \u001B[38;5;28;01mreturn\u001B[39;00m get_method(\u001B[38;5;28mself\u001B[39m)(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\matplotlib\\_api\\deprecation.py:297\u001B[0m, in \u001B[0;36mrename_parameter.<locals>.wrapper\u001B[1;34m(*args, **kwargs)\u001B[0m\n\u001B[0;32m    292\u001B[0m     warn_deprecated(\n\u001B[0;32m    293\u001B[0m         since, message\u001B[38;5;241m=\u001B[39m\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mold\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m parameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc\u001B[38;5;241m.\u001B[39m\u001B[38;5;18m__name__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m() \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m    294\u001B[0m         \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mhas been renamed \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mnew\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m since Matplotlib \u001B[39m\u001B[38;5;132;01m{\u001B[39;00msince\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m; support \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m    295\u001B[0m         \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfor the old name will be dropped %(removal)s.\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m    296\u001B[0m     kwargs[new] \u001B[38;5;241m=\u001B[39m kwargs\u001B[38;5;241m.\u001B[39mpop(old)\n\u001B[1;32m--> 297\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m func(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\matplotlib\\axis.py:2025\u001B[0m, in \u001B[0;36mAxis.set_ticklabels\u001B[1;34m(self, labels, minor, fontdict, **kwargs)\u001B[0m\n\u001B[0;32m   2021\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(locator, mticker\u001B[38;5;241m.\u001B[39mFixedLocator):\n\u001B[0;32m   2022\u001B[0m     \u001B[38;5;66;03m# Passing [] as a list of labels is often used as a way to\u001B[39;00m\n\u001B[0;32m   2023\u001B[0m     \u001B[38;5;66;03m# remove all tick labels, so only error for > 0 labels\u001B[39;00m\n\u001B[0;32m   2024\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(locator\u001B[38;5;241m.\u001B[39mlocs) \u001B[38;5;241m!=\u001B[39m \u001B[38;5;28mlen\u001B[39m(labels) \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(labels) \u001B[38;5;241m!=\u001B[39m \u001B[38;5;241m0\u001B[39m:\n\u001B[1;32m-> 2025\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m   2026\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe number of FixedLocator locations\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2027\u001B[0m             \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m (\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mlen\u001B[39m(locator\u001B[38;5;241m.\u001B[39mlocs)\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m), usually from a call to\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2028\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m set_ticks, does not match\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2029\u001B[0m             \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m the number of labels (\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mlen\u001B[39m(labels)\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m).\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m   2030\u001B[0m     tickd \u001B[38;5;241m=\u001B[39m {loc: lab \u001B[38;5;28;01mfor\u001B[39;00m loc, lab \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mzip\u001B[39m(locator\u001B[38;5;241m.\u001B[39mlocs, labels)}\n\u001B[0;32m   2031\u001B[0m     func \u001B[38;5;241m=\u001B[39m functools\u001B[38;5;241m.\u001B[39mpartial(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_format_with_dict, tickd)\n",
      "\u001B[1;31mValueError\u001B[0m: The number of FixedLocator locations (0), usually from a call to set_ticks, does not match the number of labels (189)."
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 2400x1000 with 2 Axes>"
      ],
      "image/png": "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3HjjjRkxYkS+9KUv5ac//elRPRQAAAAAAADAUNTSALx69eqsWrUqo0ePzpVXXpne3t5nDxk2LAsWLMiECROyadOmLFu27HnPeuihh5IkH/rQhzJixIj9188666zMnj07e/bsyfe///1W6gEAAAAAAAAMaS0NwLfffnuSZMaMGRk1atQB97q7u3P++ecnSe69997nPes3fuM3kjz7d4D/r8cffzxJ8tKXvrSVegAAAAAAAABDWksDcF9fX5Jk2rRph7w/ZcqUJMm6deue96wPfehD6e3tzV/91V/lX/7lX7Jt27b893//d6644orcfffdmTNnTk4//fRW6gEAAAAAAAAMad2thDds2JAkGT9+/CHvjx07NkkyMDDwvGf9zu/8Tr71rW/lL/7iLzJv3rwD7s2bNy/vf//7W6l2gK6uo35pI68/2vOazHXiPTuVK7lb07mSu3UqV3K3pnMld2s6V3K3TuVK7tZ0ruRuTedK7tapXMndms6V3K3pXMndms6V3K1TuZK7NZ0ruVvTuZK7dSpXcremcyV3azpXcrdO5Uru1nSu5G5N50ru1nSu5G6dypXcrelcyd2azpXcrVO5krs1nSu5W9O5kru9ELnBamkAfvrpp5PkoJ9/fs7IkSOTJLt27crOnTvT09Nz2LN+9rOf5aMf/Wh+9rOf5YQTTsjLXvayPPHEE9mwYUO+9a1v5fTTT89b3vKWVuolSU48cfigs48/vvWga8cd15VTTjmh5fdt5bwmc514z5JyJXdrOldyt3bkSu7WjlzJ3ZrOldytHbmSuzWdK7lbO3Ild2tHruRuTedK7taOXMndms6V3K0duZK7tSNXcremcyV3a0eu5G5N50ru1o5cyd3akSu5W9O5kru1I1dyt6ZzJXdrR67kbu3Ildyt6VzJ3dqRK7lb07mSu7UjV3K3Y80dq5YG4N27dydJhg079C9H//L1w2WSZOfOnbn00kuzbt26/Pmf/3kuv/zyHH/88UmS1atX573vfW8++MEPZsyYMTnrrLNaqZjNm7dn587dg8ru2bPvkNd+/vOnW3rPVs9rMteJ9ywpV3K3pnMld2tHruRu7ciV3K3pXMnd2pEruVvTuZK7tSNXcrd25Eru1nSu5G7tyJXcrelcyd3akSu5WztyJXdrOldyt3bkSu7WdK7kbu3IldytHbmSuzWdK7lbO3Ild2s6V3K3duRK7taOXMndms6V3K0duZK7NZ0ruVs7ciV3O9bc4fT0dA/qy7AtDcDDhw/Pli1bsn379kPe37ZtW5Kkt7c33d2HP3rp0qVZt25dfvu3fzsLFy5M1y99r/nMM8/MokWL8s53vjPXXnttywNwkuw7+L9dW19/tOc1mevEe3YqV3K3pnMld+tUruRuTedK7tZ0ruRuncqV3K3pXMndms6V3K1TuZK7NZ0ruVvTuZK7NZ0ruVunciV3azpXcremcyV361Su5G5N50ru1nSu5G6dypXcrelcyd2azpXcrelcyd06lSu5W9O5krs1nSu5W6dyJXdrOldyt6ZzJXd7IXKDdfiv6R7CmDFjkiT9/f2HvP/c9dNOO+2I56xatSpJ8vu///sHjL/Pef3rX5/hw4fnoYceyjPPPNNKRQAAAAAAAIAhq6UBeNKkSUmStWvXHvJ+X19fkmTy5MlHPOe5bxAf6Weik2Tfvn0GYAAAAAAAAIBBamkAPuecc5Iky5cvz86dOw+4t2fPnixfvjxJct555x3xnOeG5Pvuu++Q91etWpXt27dnzJgxGT16dCsVAQAAAAAAAIaslgbgmTNnZty4cenv788VV1yRXbt2JXl2/L3qqquyfv36TJ06NWefffb+1zzwwAOZM2dObrzxxv3X/vRP/zS9vb25//77c+211+4/J0keeuihLFy4MElyySWXHMuzAQAAAAAAAAwp3a2Ee3p6cvXVV2fevHm56aabsmLFikycODGPPvpoBgYGMnbs2Fx77bUH/F3fxYsXp6+vL4888kjmzp2bJBk/fnw+85nP5P3vf3+uu+66/N3f/V0mTpyYJ598Mo8++mj27t2bmTNn5h3veEejDwsAAAAAAABQs5a+AZwk06dPz9KlSzNr1qzs3bs3a9asSU9PT+bOnZtly5Zl3LhxB+RnzZqVkSNH5sILLzzg+rnnnpubb745b33rWzNq1KisXbs2Tz31VF73utfl2muvzec+97nn/RvBAAAAAAAAAPyvlr4B/JyJEyfmmmuuGVR29uzZmT179mHPueKKK46mAgAAAAAAAAD/h6/YAgAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTC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AAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIA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AAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUInuo3nR5s2bc9111+XOO+/MY489lhEjRmT69OmZP39+pk6dOuhz/vVf/zV/8zd/kwcffDBPPfVURo0alcmTJ+ftb397zjnnnKOpBgAAAAAAADBktfwN4IGBgVxwwQW5/vrrs2nTpkybNi29vb256667ctFFF+WOO+4Y1Dmf/exnc+mll2bFihV5yUtekilTpmTYsGG59957M3/+/Hz6059u+WEAAAAAAAAAhrKWB+DLL788GzduzIwZM7Jy5cosWbIkK1asyCWXXJI9e/Zk4cKF2bJly/Oec/fdd+fP/uzPcvfdd+eWW27JN77xjdxzzz153/velyS5/vrrs3r16tafCAAAAAAAAGCIamkAXr16dVatWpXRo0fnyiuvTG9v77OHDBuWBQsWZMKECdm0aVOWLVv2vGd99KMfzSc+8Yn82q/92v5r3d3dede73pXXvOY1SZK77rqrlXoAAAAAAAAAQ1pLA/Dtt9+eJJkxY0ZGjRp1wL3u7u6cf/75SZJ77733ec8688wzD3tv4sSJSZLt27e3Ug8AAAAAAABgSGtpAO7r60uSTJs27ZD3p0yZkiRZt27dMZVav359kmT8+PHHdA4AAAAAAADAUNLdSnjDhg1JDj/Mjh07NkkyMDBw1IUeeuihrFq1Kscdd1zOPffcozqjq+uo376R1x/teU3mOvGencqV3K3pXMndOpUruVvTuZK7NZ0ruVunciV3azpXcremcyV361Su5G5N50ru1nSu5G5N50ru1qlcyd2azpXcrelcyd06lSu5W9O5krs1nSu5W6dyJXdrOldyt6ZzJXdrOldyt07lSu7WdK7kbk3nSu7WqVzJ3ZrOldyt6VzJ3V6I3GC1NAA//fTTSXLQzz8/Z+TIkUmSXbt2ZefOnenp6WmpzA9/+MO8+93vzr59+3LxxRdnwoQJLb0+SU48cfigs48/vvWga8cd15VTTjmh5fdt5bwmc514z5JyJXdrOldyt3bkSu7WjlzJ3ZrOldytHbmSuzWdK7lbO3Ild2tHruRuTedK7taOXMndms6V3K0duZK7tSNXcremcyV3a0eu5G5N50ru1o5cyd3akSu5W9O5kru1I1dyt6ZzJXdrR67kbu3Ildyt6VzJ3dqRK7lb07mSu7UjV3K3Fyo32B20pQF49+7dSZJhww79y9G/fP1wmcO56aabsmjRomzfvj1//Md/nA9+8IMtvf45mzdvz86duweV3bNn3yGv/fznTx/Vew/2vCZznXjPknIld2s6V3K3duRK7taOXMndms6V3K0duZK7NZ0ruVs7ciV3a0eu5G5N50ru1o5cyd2azpXcrR25kru1I1dyt6ZzJXdrR67kbk3nSu7WjlzJ3dqRK7lb07mSu7UjV3K3pnMld2tHruRu7ciV3K3pXMnd2pEruVvTuZK7tSNXcrcXKrd58/ZBjcAtDcDDhw/Pli1bsn379kPe37ZtW5Kkt7c33d2DO/rnP/95PvShD2XlypUZMWJEPv7xj+dtb3tbK7UOsu/g/yZtff3RntdkrhPv2alcyd2azpXcrVO5krs1nSu5W9O5krt1Kldyt6ZzJXdrOldyt07lSu7WdK7kbk3nSu7WdK7kbp3Kldyt6VzJ3ZrOldytU7mSuzWdK7lb07mSu3UqV3K3pnMld2s6V3K3pnMld+tUruRuTedK7tZ0ruRuncqV3K3pXMndms6V3O2FyA1WS1/THTNmTJKkv7//kPefu37aaacN6rw1a9bkggsuyMqVK3PWWWfl1ltvPebxFwAAAAAAAGCoamkAnjRpUpJk7dq1h7zf19eXJJk8efLznrV27drMmzcvTz75ZD74wQ9m8eLFGT9+fCt1AAAAAAAAAPglLQ3A55xzTpJk+fLl2blz5wH39uzZk+XLlydJzjvvvCOes2vXrrzvfe/Ltm3bcs0112Tu3Lnp6upqpQoAAAAAAAAA/0dLA/DMmTMzbty49Pf354orrsiuXbuSPDv+XnXVVVm/fn2mTp2as88+e/9rHnjggcyZMyc33njj/mv/9m//lvXr12fKlCmZMWNGM08CAAAAAAAAMMR1txLu6enJ1VdfnXnz5uWmm27KihUrMnHixDz66KMZGBjI2LFjc+211x7wbd7Fixenr68vjzzySObOnZskefjhh5MkGzduzDve8Y4jvucXv/jFjBgxosXHAgAAAAAAABh6WhqAk2T69OlZunRpvvSlL+X+++/PmjVrMnbs2MydOzeXXXZZRo8efUB+1qxZ+e53v5sLLrhg/7WtW7cmSX7xi1/kvvvuO+L77d69u9WKAAAAAAAAAENSywNwkkycODHXXHPNoLKzZ8/O7NmzD7j2nve8J+95z3uO5q0BAAAAAAAAOIyW/gYwAAAAAAAAAOUyAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlejudIEXQlfXruzYseOAa8cff3z27XtREecBAAAAAAAAvBCqHIB37NiRRYs+ccC1hQs/nJ6eoxtsmz4PAAAAAAAA4IXgJ6ABAAAAAAAAKmEABgAAAAAAAKiEARgAAAAAAACgEgZgAAAAAAAAgEoYgAEAAAAAAAAqYQAGAAAAAAAAqIQBGAAAAAAAAKASBmAAAAAAAACAShiAAQAAAAAAACphAAYAAAAAAACohAEYAAAAAAAAoBIGYAAAAAAAAIBKGIABAAAAAAAAKmEABgAAAAAAAKhE99G8aPPmzbnuuuty55135rHHHsuIESMyffr0zJ8/P1OnTh30OXv37s03v/nNLF26ND/5yU/S1dWVV7ziFbn44osze/bso6kGAAAAAAAAMGS1PAAPDAzkoosuysaNGzN69OhMmzYtGzZsyF133ZWVK1fmC1/4Qt74xjc+7zm7d+/OZZddlnvuuSc9PT2ZPHlytmzZkjVr1mTNmjX5wQ9+kAULFhzVQwEAAAAAAAAMRS3/BPTll1+ejRs3ZsaMGVm5cmWWLFmSFStW5JJLLsmePXuycOHCbNmy5XnPue6663LPPfdk4sSJuf322/PNb34zt956az73uc+lq6srN9xwQ1avXn1UDwUAAAAAAAAwFLU0AK9evTqrVq3K6NGjc+WVV6a3t/fZQ4YNy4IFCzJhwoRs2rQpy5YtO+I5zzzzTG644YYkyaJFi3Lqqafuvzdz5sy85S1vSZIsWbKkpYcBAAAAAAAAGMpaGoBvv/32JMmMGTMyatSoA+51d3fn/PPPT5Lce++9Rzznvvvuy9atW/PSl74006dPP+j+m9/85v3n7Nu3r5WKAAAAAAAAAENWSwNwX19fkmTatGmHvD9lypQkybp16wZ1zhlnnHHEc7Zu3Zr+/v5WKgIAAAAAAAAMWS0NwBs2bEiSjB8//pD3x44dmyQZGBg4pnNOPPHEjBw5Mkny+OOPt1IRAAAAAAAAYMjqbiX89NNPJ8lBP//8nOdG2127dmXnzp3p6ek5qnOSZMSIEdm6dWu2bdvWSsV0dw/L8OG9OfPMMw+4Pnx4b7q7D3zc44771c+V3K0duZK7eVafdf/+ntVn3bMeKVdyt3bkSu7mWX3WPavPun9/z3qkXMndPKvPun9/z+qz7lmPlCu5WztyJXfzrD7rntVnffC5wX23t2tfC39k95WvfGX27NmTZcuW5fTTTz/o/qOPPppzzz03SfL973//oLLPmTt3bu6///4sXLgwl1xyySEzZ599dgYGBrJ48eK87nWvG2xFAAAAAAAAgCGrpZ+AHj58eJJk+/bth7z/3Ld1e3sPXqpbOeeXzzrSt4QBAAAAAAAA+F8tDcBjxoxJkvT39x/y/nPXTzvttGM6Z8uWLft/JnrChAmtVAQAAAAAAAAYsloagCdNmpQkWbt27SHv9/X1JUkmT57cyDnjx4/Pi1/84lYqAgAAAAAAAAxZLQ3A55xzTpJk+fLl2blz5wH39uzZk+XLlydJzjvvvOc9p6urK2vXrs2Pf/zjg+7fcsstgzoHAAAAAAAAgP/V0gA8c+bMjBs3Lv39/bniiiuya9euJM+Ov1dddVXWr1+fqVOn5uyzz97/mgceeCBz5szJjTfeuP/aqaeempkzZ2bfvn1ZsGBBnnjiif33li9fnptvvjmjRo3KpZdeeoyPBwAAAAAAADB0dO3bt29fKy/43ve+l3nz5mX79u055ZRTMnHixDz66KMZGBjI2LFj841vfCPjxo3bn//Lv/zL3H333RkxYkTWrFmz//oTTzyRiy66KOvXr8/w4cPzqle9Kk899VTWrVuXF73oRfnyl7+cN7zhDc09KQAAAAAAAEDlWvoGcJJMnz49S5cuzaxZs7J3796sWbMmPT09mTt3bpYtW3bA+Jsks2bNysiRI3PhhRcecP3kk0/Ot7/97cybNy8nn3xyHnzwwTz55JOZNWtW/uEf/sH4CwAAAAAAANCilr8BDAAAAAAAAECZWv4GMAAAAAAAAABlMgADAAAAAAAAVMIADAAAAAAAAFAJAzAAAAAAAABAJQzAAAAAAAAAAJUwAAMAAAAAAABUwgAMAAAAAAAAUAkDMAAAAAAAAEAlDMAAAAAAAAAAlTAAAwAAAAAAAFTCAAwAAAAAAABQCQMwAAAAAAAAQCUMwAAAAAAAAACVMAADAAAAAAAAVOL/AS9LADqiiGinAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 112
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:07:24.698265Z",
     "start_time": "2024-09-26T03:07:24.284830Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 数值型变量的描述性分析\n",
    "num_desc = data1.loc[:,num_col].describe().T.assign(nuniq = data1.loc[:,num_col].apply(lambda x:x.nunique()),\\\n",
    "                                         misssing_pct  =data1.loc[:,num_col].apply(lambda x:(len(x)-x.count())/len(x)))\\\n",
    "                              .sort_values('nuniq')\n",
    "num_desc.head(10)"
   ],
   "id": "77ca5da08f6f831d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                     count  mean   std   min   25%   50%   75%    max  nuniq  \\\n",
       "WeblogInfo_49    49567.000 0.000 0.000 0.000 0.000 0.000 0.000  0.000      1   \n",
       "target           30000.000 0.073 0.261 0.000 0.000 0.000 0.000  1.000      2   \n",
       "WeblogInfo_44    49567.000 0.000 0.016 0.000 0.000 0.000 0.000  1.000      2   \n",
       "SocialNetwork_15 49999.000 0.028 0.165 0.000 0.000 0.000 0.000  1.000      2   \n",
       "WeblogInfo_41    49567.000 0.000 0.019 0.000 0.000 0.000 0.000  1.000      2   \n",
       "SocialNetwork_16 49999.000 0.017 0.129 0.000 0.000 0.000 0.000  1.000      2   \n",
       "WeblogInfo_47    49567.000 0.002 0.041 0.000 0.000 0.000 0.000  2.000      3   \n",
       "WeblogInfo_46    49567.000 0.001 0.027 0.000 0.000 0.000 0.000  2.000      3   \n",
       "WeblogInfo_10    49999.000 0.000 0.090 0.000 0.000 0.000 0.000 20.000      3   \n",
       "UserInfo_10      49999.000 0.311 0.604 0.000 0.000 0.000 0.000  2.000      3   \n",
       "\n",
       "                  misssing_pct  \n",
       "WeblogInfo_49            0.009  \n",
       "target                   0.400  \n",
       "WeblogInfo_44            0.009  \n",
       "SocialNetwork_15         0.000  \n",
       "WeblogInfo_41            0.009  \n",
       "SocialNetwork_16         0.000  \n",
       "WeblogInfo_47            0.009  \n",
       "WeblogInfo_46            0.009  \n",
       "WeblogInfo_10            0.000  \n",
       "UserInfo_10              0.000  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "      <th>nuniq</th>\n",
       "      <th>misssing_pct</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_49</th>\n",
       "      <td>49567.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>target</th>\n",
       "      <td>30000.000</td>\n",
       "      <td>0.073</td>\n",
       "      <td>0.261</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_44</th>\n",
       "      <td>49567.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.016</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_15</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.028</td>\n",
       "      <td>0.165</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_41</th>\n",
       "      <td>49567.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.019</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_16</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.017</td>\n",
       "      <td>0.129</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_47</th>\n",
       "      <td>49567.000</td>\n",
       "      <td>0.002</td>\n",
       "      <td>0.041</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_46</th>\n",
       "      <td>49567.000</td>\n",
       "      <td>0.001</td>\n",
       "      <td>0.027</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_10</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.090</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_10</th>\n",
       "      <td>49999.000</td>\n",
       "      <td>0.311</td>\n",
       "      <td>0.604</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 113
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:07:46.169104Z",
     "start_time": "2024-09-26T03:07:45.560674Z"
    }
   },
   "cell_type": "code",
   "source": [
    "num_col2 = [col for col in num_col if col!='target']\n",
    "# 筛选出只有数值型变量的数据集\n",
    "num_data = data1.loc[:,num_col2]\n",
    "\n",
    "# 排序特征衍生\n",
    "for col in num_col2:\n",
    "    num_data['rank'+col] = num_data[col].rank(method='max')/num_data.shape[0]\n",
    "\n",
    "# 将排序特征转为单独的数据集\n",
    "rank_col = [col for col in num_data.columns if col not in num_col2]\n",
    "rank_df = num_data.loc[:,rank_col]"
   ],
   "id": "e1991e1d9f122c71",
   "outputs": [],
   "execution_count": 115
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:07:52.209492Z",
     "start_time": "2024-09-26T03:07:52.196831Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 生成只包含periods的临时表\n",
    "periods_col = [i for i in num_col2 if i.find('Period')>0]\n",
    "periods_col2 = periods_col+['target']\n",
    "periods_data = data1.loc[:,periods_col2]"
   ],
   "id": "34c669a576415e98",
   "outputs": [],
   "execution_count": 116
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:09:25.623350Z",
     "start_time": "2024-09-26T03:09:25.613114Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 观察包含period1所有字段的数据，发现字段之间量级差异比较大，可能代表不同的含义，不适合做衍生\n",
    "periods1_col = [col for col in periods_col if col.find('Period1')>0]\n",
    "periods_data.loc[:,periods1_col].head()"
   ],
   "id": "bb85d8c47563fa61",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   ThirdParty_Info_Period1_1  ThirdParty_Info_Period1_2  \\\n",
       "0                         10                         47   \n",
       "1                          0                          0   \n",
       "2                          1                          2   \n",
       "3                          9                         54   \n",
       "4                          1                          5   \n",
       "\n",
       "   ThirdParty_Info_Period1_3  ThirdParty_Info_Period1_4  \\\n",
       "0                        167                          0   \n",
       "1                         68                        105   \n",
       "2                         50                         50   \n",
       "3                         56                        125   \n",
       "4                         39                         34   \n",
       "\n",
       "   ThirdParty_Info_Period1_5  ThirdParty_Info_Period1_6  \\\n",
       "0                         25                         65   \n",
       "1                         40                          2   \n",
       "2                         49                          0   \n",
       "3                         38                          0   \n",
       "4                         36                         73   \n",
       "\n",
       "   ThirdParty_Info_Period1_7  ThirdParty_Info_Period1_8  \\\n",
       "0                         68                         34   \n",
       "1                        132                         39   \n",
       "2                         78                         22   \n",
       "3                        136                         45   \n",
       "4                          0                          0   \n",
       "\n",
       "   ThirdParty_Info_Period1_9  ThirdParty_Info_Period1_10  \\\n",
       "0                          2                           1   \n",
       "1                          2                           1   \n",
       "2                          0                           0   \n",
       "3                          2                           1   \n",
       "4                          1                           1   \n",
       "\n",
       "   ThirdParty_Info_Period1_11  ThirdParty_Info_Period1_12  \\\n",
       "0                          10                          63   \n",
       "1                           8                           0   \n",
       "2                           7                           0   \n",
       "3                           9                           0   \n",
       "4                           5                           0   \n",
       "\n",
       "   ThirdParty_Info_Period1_13  ThirdParty_Info_Period1_14  \\\n",
       "0                       27489                           0   \n",
       "1                        3839                        9558   \n",
       "2                        3578                        5360   \n",
       "3                        3805                        9765   \n",
       "4                         561                         792   \n",
       "\n",
       "   ThirdParty_Info_Period1_15  ThirdParty_Info_Period1_16  \\\n",
       "0                       18900                        6083   \n",
       "1                          49                        9571   \n",
       "2                           0                        4646   \n",
       "3                           0                       10461   \n",
       "4                        1353                           0   \n",
       "\n",
       "   ThirdParty_Info_Period1_17  \n",
       "0                        2506  \n",
       "1                        3777  \n",
       "2                        4292  \n",
       "3                        3109  \n",
       "4                           0  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ThirdParty_Info_Period1_1</th>\n",
       "      <th>ThirdParty_Info_Period1_2</th>\n",
       "      <th>ThirdParty_Info_Period1_3</th>\n",
       "      <th>ThirdParty_Info_Period1_4</th>\n",
       "      <th>ThirdParty_Info_Period1_5</th>\n",
       "      <th>ThirdParty_Info_Period1_6</th>\n",
       "      <th>ThirdParty_Info_Period1_7</th>\n",
       "      <th>ThirdParty_Info_Period1_8</th>\n",
       "      <th>ThirdParty_Info_Period1_9</th>\n",
       "      <th>ThirdParty_Info_Period1_10</th>\n",
       "      <th>ThirdParty_Info_Period1_11</th>\n",
       "      <th>ThirdParty_Info_Period1_12</th>\n",
       "      <th>ThirdParty_Info_Period1_13</th>\n",
       "      <th>ThirdParty_Info_Period1_14</th>\n",
       "      <th>ThirdParty_Info_Period1_15</th>\n",
       "      <th>ThirdParty_Info_Period1_16</th>\n",
       "      <th>ThirdParty_Info_Period1_17</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10</td>\n",
       "      <td>47</td>\n",
       "      <td>167</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>65</td>\n",
       "      <td>68</td>\n",
       "      <td>34</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>63</td>\n",
       "      <td>27489</td>\n",
       "      <td>0</td>\n",
       "      <td>18900</td>\n",
       "      <td>6083</td>\n",
       "      <td>2506</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>68</td>\n",
       "      <td>105</td>\n",
       "      <td>40</td>\n",
       "      <td>2</td>\n",
       "      <td>132</td>\n",
       "      <td>39</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3839</td>\n",
       "      <td>9558</td>\n",
       "      <td>49</td>\n",
       "      <td>9571</td>\n",
       "      <td>3777</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>50</td>\n",
       "      <td>50</td>\n",
       "      <td>49</td>\n",
       "      <td>0</td>\n",
       "      <td>78</td>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>3578</td>\n",
       "      <td>5360</td>\n",
       "      <td>0</td>\n",
       "      <td>4646</td>\n",
       "      <td>4292</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9</td>\n",
       "      <td>54</td>\n",
       "      <td>56</td>\n",
       "      <td>125</td>\n",
       "      <td>38</td>\n",
       "      <td>0</td>\n",
       "      <td>136</td>\n",
       "      <td>45</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>3805</td>\n",
       "      <td>9765</td>\n",
       "      <td>0</td>\n",
       "      <td>10461</td>\n",
       "      <td>3109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>39</td>\n",
       "      <td>34</td>\n",
       "      <td>36</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>561</td>\n",
       "      <td>792</td>\n",
       "      <td>1353</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 117
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:09:35.784375Z",
     "start_time": "2024-09-26T03:09:35.775787Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 观察后缀都为1的字段，发现字段数据的量级基本一致，可以对其做min,max,avg等统计值的衍生\n",
    "period_1_col=[]\n",
    "for i in range(0,102,17):\n",
    "    col = periods_col[i]\n",
    "    period_1_col.append(col)\n",
    "periods_data.loc[:,period_1_col].head()"
   ],
   "id": "450f8971d790e3c2",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   ThirdParty_Info_Period1_1  ThirdParty_Info_Period2_1  \\\n",
       "0                         10                         25   \n",
       "1                          0                          7   \n",
       "2                          1                          0   \n",
       "3                          9                          6   \n",
       "4                          1                          8   \n",
       "\n",
       "   ThirdParty_Info_Period3_1  ThirdParty_Info_Period4_1  \\\n",
       "0                         36                          4   \n",
       "1                          1                          0   \n",
       "2                          1                         14   \n",
       "3                          2                         25   \n",
       "4                          3                          0   \n",
       "\n",
       "   ThirdParty_Info_Period5_1  ThirdParty_Info_Period6_1  \n",
       "0                          0                          0  \n",
       "1                          0                          2  \n",
       "2                          1                          0  \n",
       "3                          9                         11  \n",
       "4                          0                          2  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ThirdParty_Info_Period1_1</th>\n",
       "      <th>ThirdParty_Info_Period2_1</th>\n",
       "      <th>ThirdParty_Info_Period3_1</th>\n",
       "      <th>ThirdParty_Info_Period4_1</th>\n",
       "      <th>ThirdParty_Info_Period5_1</th>\n",
       "      <th>ThirdParty_Info_Period6_1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10</td>\n",
       "      <td>25</td>\n",
       "      <td>36</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "      <td>9</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 118
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:09:44.358186Z",
     "start_time": "2024-09-26T03:09:44.354492Z"
    }
   },
   "cell_type": "code",
   "source": [
    "p_num_col=[]\n",
    "# 将Period变量按照后缀数字存储成嵌套列表\n",
    "for i in range(0,17,1):\n",
    "    p_col=[]\n",
    "    for j in range(i,102,17):\n",
    "        col = periods_col[j]\n",
    "        p_col.append(col)\n",
    "    p_num_col.append(p_col)"
   ],
   "id": "632a87083c95f976",
   "outputs": [],
   "execution_count": 119
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:10:56.063027Z",
     "start_time": "2024-09-26T03:09:51.111380Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# min,max,avg等统计值的衍生，并将衍生后的特征存成单独的数据集\n",
    "periods_data = periods_data.fillna(0)\n",
    "periods_fea_data=pd.DataFrame()\n",
    "for j,p_list in zip(range(1,18,1),p_num_col):\n",
    "    p_data = periods_data.loc[:,p_list]\n",
    "    period_min=[]\n",
    "    period_max=[]\n",
    "    period_avg=[]\n",
    "    for i in range(periods_data.shape[0]):\n",
    "        a = p_data.iloc[i]\n",
    "        period_min.append(np.min(a))\n",
    "        period_max.append(np.max(a))\n",
    "        period_avg.append(np.average(a))\n",
    "    periods_fea_data['periods_'+str(j)+'_min'] = period_min\n",
    "    periods_fea_data['periods_'+str(j)+'_max'] = period_max\n",
    "    periods_fea_data['periods_'+str(j)+'_avg'] = period_avg"
   ],
   "id": "2ef03c66c44dc485",
   "outputs": [],
   "execution_count": 120
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:15:33.378975Z",
     "start_time": "2024-09-26T03:15:22.412570Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 保存特征衍生后的数据集至本地\n",
    "data1.to_csv('data1_process.csv',encoding='gb18030',index=False)\n",
    "rank_df.to_csv('rank_feature.csv',encoding='gbk',index=False)\n",
    "periods_fea_data.to_csv('periods_feature.csv',encoding='gbk',index=False)"
   ],
   "id": "672daab850dcadd1",
   "outputs": [],
   "execution_count": 121
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:16:51.947266Z",
     "start_time": "2024-09-26T03:16:51.680872Z"
    }
   },
   "cell_type": "code",
   "source": "df2 = pd.read_csv(r'D:\\pcdaima\\shixun\\shixun1\\data\\Rank\\data_input3.csv',encoding='gbk')",
   "id": "6eb5604068901b39",
   "outputs": [],
   "execution_count": 122
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:16:59.466655Z",
     "start_time": "2024-09-26T03:16:59.356488Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# 最近的修改时间距离成交时间差\n",
    "# 时间格式的转换\n",
    "df2['ListingInfo1'] = pd.to_datetime(df2['ListingInfo1'])\n",
    "df2['UserupdateInfo2'] = pd.to_datetime(df2['UserupdateInfo2'])"
   ],
   "id": "7bd598fafd847043",
   "outputs": [],
   "execution_count": 123
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:17:07.010764Z",
     "start_time": "2024-09-26T03:17:06.751815Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 计算时间差\n",
    "time_span = df2.groupby('Idx',as_index=False).agg({'UserupdateInfo2':np.max,'ListingInfo1':np.max})\n",
    "time_span['update_timespan'] = time_span['ListingInfo1']-time_span['UserupdateInfo2']\n",
    "time_span['update_timespan'] = time_span['update_timespan'].map(lambda x:str(x))\n",
    "time_span['update_timespan'] = time_span['update_timespan'].map(lambda x:int(x[:x.find('d')]))\n",
    "time_span = time_span[['Idx','update_timespan']]"
   ],
   "id": "704e47814ca16e9c",
   "outputs": [],
   "execution_count": 124
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:17:52.690631Z",
     "start_time": "2024-09-26T03:17:13.348479Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将UserupdateInfo1里的字符改为小写形式\n",
    "df2['UserupdateInfo1'] = df2.UserupdateInfo1.map(lambda x:x.lower())\n",
    "# 根据Idx计算UserupdateInfo2的非重复计数\n",
    "group = df2.groupby(['Idx','UserupdateInfo1'],as_index=False).agg({'UserupdateInfo2':pd.Series.nunique})"
   ],
   "id": "1e2ee6ee4f561117",
   "outputs": [],
   "execution_count": 125
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:19:33.889314Z",
     "start_time": "2024-09-26T03:18:17.321907Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 每种信息修改的次数的衍生\n",
    "user_df_list=[]\n",
    "for idx in group.Idx.unique():\n",
    "    user_df  = group[group.Idx==idx]\n",
    "    change_cate = list(user_df.UserupdateInfo1)\n",
    "    change_cnt = list(user_df.UserupdateInfo2)\n",
    "    user_col  = ['Idx']+change_cate\n",
    "    user_value = [user_df.iloc[0]['Idx']]+change_cnt\n",
    "    user_df2 = pd.DataFrame(np.array(user_value).reshape(1,len(user_value)),columns=user_col)\n",
    "    user_df_list.append(user_df2)\n",
    "cate_change_df = pd.concat(user_df_list,axis=0)\n",
    "cate_change_df.head()"
   ],
   "id": "b163fedb36de1eb0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  _educationid  _hasbuycar  _idnumber  _lastupdatedate  \\\n",
       "0    3         1.000       1.000      1.000            1.000   \n",
       "0    4         1.000       1.000      1.000            1.000   \n",
       "0    5         1.000       1.000      1.000            1.000   \n",
       "0    8         1.000       1.000      1.000            1.000   \n",
       "0   11         1.000       1.000      1.000            1.000   \n",
       "\n",
       "   _marriagestatusid  _mobilephone   _qq  _realname  _residencephone  ...  \\\n",
       "0              1.000         1.000 1.000      1.000            1.000  ...   \n",
       "0              1.000         3.000 1.000      1.000            1.000  ...   \n",
       "0              1.000         1.000 1.000      1.000            1.000  ...   \n",
       "0              1.000         2.000 1.000      1.000            1.000  ...   \n",
       "0              1.000         3.000 1.000      2.000            1.000  ...   \n",
       "\n",
       "   _creationdate  _orderid  _userid  _bussinessaddress  _hasbusinesslicense  \\\n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "\n",
       "   _cityid  _districtid  _provinceid  _hassborgjj  _position  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "\n",
       "[5 rows x 56 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>_educationid</th>\n",
       "      <th>_hasbuycar</th>\n",
       "      <th>_idnumber</th>\n",
       "      <th>_lastupdatedate</th>\n",
       "      <th>_marriagestatusid</th>\n",
       "      <th>_mobilephone</th>\n",
       "      <th>_qq</th>\n",
       "      <th>_realname</th>\n",
       "      <th>_residencephone</th>\n",
       "      <th>...</th>\n",
       "      <th>_creationdate</th>\n",
       "      <th>_orderid</th>\n",
       "      <th>_userid</th>\n",
       "      <th>_bussinessaddress</th>\n",
       "      <th>_hasbusinesslicense</th>\n",
       "      <th>_cityid</th>\n",
       "      <th>_districtid</th>\n",
       "      <th>_provinceid</th>\n",
       "      <th>_hassborgjj</th>\n",
       "      <th>_position</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>8</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 56 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 126
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:20:34.942218Z",
     "start_time": "2024-09-26T03:20:34.928282Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将cate_change_df里的空值填为0\n",
    "cate_change_df = cate_change_df.fillna(0)\n",
    "cate_change_df.shape"
   ],
   "id": "b4916cc3953de42e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49993, 56)"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 127
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:20:48.174516Z",
     "start_time": "2024-09-26T03:20:43.087684Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 修改信息的总次数，按照日期修改的次数的衍生\n",
    "update_cnt = df2.groupby('Idx',as_index=False).agg({'UserupdateInfo2':pd.Series.nunique,\n",
    "                                                         'ListingInfo1':pd.Series.count}).\\\n",
    "                      rename(columns={'UserupdateInfo2':'update_time_cnt',\n",
    "                                      'ListingInfo1':'update_all_cnt'})\n",
    "update_cnt.head()"
   ],
   "id": "9d682f01ffc3394d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  update_time_cnt  update_all_cnt\n",
       "0    3                1              13\n",
       "1    4                3              17\n",
       "2    5                1              13\n",
       "3    8                2              14\n",
       "4   11                4              17"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>update_time_cnt</th>\n",
       "      <th>update_all_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 128
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:21:18.444105Z",
     "start_time": "2024-09-26T03:21:18.395477Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将三个衍生特征的临时表进行关联\n",
    "update_info = pd.merge(time_span,cate_change_df,on='Idx',how='left')\n",
    "update_info = pd.merge(update_info,update_cnt,on='Idx',how='left')\n",
    "update_info.head()"
   ],
   "id": "9b70303655b13f7",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  update_timespan  _educationid  _hasbuycar  _idnumber  _lastupdatedate  \\\n",
       "0    3               67         1.000       1.000      1.000            1.000   \n",
       "1    4                0         1.000       1.000      1.000            1.000   \n",
       "2    5               14         1.000       1.000      1.000            1.000   \n",
       "3    8                2         1.000       1.000      1.000            1.000   \n",
       "4   11                0         1.000       1.000      1.000            1.000   \n",
       "\n",
       "   _marriagestatusid  _mobilephone   _qq  _realname  ...  _userid  \\\n",
       "0              1.000         1.000 1.000      1.000  ...    0.000   \n",
       "1              1.000         3.000 1.000      1.000  ...    0.000   \n",
       "2              1.000         1.000 1.000      1.000  ...    0.000   \n",
       "3              1.000         2.000 1.000      1.000  ...    0.000   \n",
       "4              1.000         3.000 1.000      2.000  ...    0.000   \n",
       "\n",
       "   _bussinessaddress  _hasbusinesslicense  _cityid  _districtid  _provinceid  \\\n",
       "0              0.000                0.000    0.000        0.000        0.000   \n",
       "1              0.000                0.000    0.000        0.000        0.000   \n",
       "2              0.000                0.000    0.000        0.000        0.000   \n",
       "3              0.000                0.000    0.000        0.000        0.000   \n",
       "4              0.000                0.000    0.000        0.000        0.000   \n",
       "\n",
       "   _hassborgjj  _position  update_time_cnt  update_all_cnt  \n",
       "0        0.000      0.000                1              13  \n",
       "1        0.000      0.000                3              17  \n",
       "2        0.000      0.000                1              13  \n",
       "3        0.000      0.000                2              14  \n",
       "4        0.000      0.000                4              17  \n",
       "\n",
       "[5 rows x 59 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>update_timespan</th>\n",
       "      <th>_educationid</th>\n",
       "      <th>_hasbuycar</th>\n",
       "      <th>_idnumber</th>\n",
       "      <th>_lastupdatedate</th>\n",
       "      <th>_marriagestatusid</th>\n",
       "      <th>_mobilephone</th>\n",
       "      <th>_qq</th>\n",
       "      <th>_realname</th>\n",
       "      <th>...</th>\n",
       "      <th>_userid</th>\n",
       "      <th>_bussinessaddress</th>\n",
       "      <th>_hasbusinesslicense</th>\n",
       "      <th>_cityid</th>\n",
       "      <th>_districtid</th>\n",
       "      <th>_provinceid</th>\n",
       "      <th>_hassborgjj</th>\n",
       "      <th>_position</th>\n",
       "      <th>update_time_cnt</th>\n",
       "      <th>update_all_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>67</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>3</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>14</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>3.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 59 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 129
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:21:35.079675Z",
     "start_time": "2024-09-26T03:21:34.054733Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 保存数据至本地\n",
    "update_info.to_csv(r'update_feature.csv',encoding='gbk',index=False)"
   ],
   "id": "99da5e32167be646",
   "outputs": [],
   "execution_count": 130
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:22:00.627285Z",
     "start_time": "2024-09-26T03:22:00.245718Z"
    }
   },
   "cell_type": "code",
   "source": "df3 = pd.read_csv(r'D:\\pcdaima\\shixun\\shixun1\\data\\Rank\\data_input2.csv',encoding='gb18030')",
   "id": "fbdce6556be6571b",
   "outputs": [],
   "execution_count": 131
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:22:09.662216Z",
     "start_time": "2024-09-26T03:22:09.610161Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 累计登录次数\n",
    "log_cnt = df3.groupby('Idx',as_index=False).LogInfo3.count().rename(columns={'LogInfo3':'log_cnt'})\n",
    "log_cnt.head()"
   ],
   "id": "8d184730794ee270",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  log_cnt\n",
       "0    3       26\n",
       "1    4       11\n",
       "2    5       11\n",
       "3    8      125\n",
       "4   11       30"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>log_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 132
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:23:09.432952Z",
     "start_time": "2024-09-26T03:23:09.124504Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 最近一次的登录时间距离当前时间差\n",
    "df3['Listinginfo1']=pd.to_datetime(df3.Listinginfo1)\n",
    "df3['LogInfo3'] = pd.to_datetime(df3.LogInfo3)\n",
    "time_log_span = df3.groupby('Idx',as_index=False).agg({'Listinginfo1':np.max,\n",
    "                                                       'LogInfo3':np.max})\n",
    "time_log_span['log_timespan'] = time_log_span['Listinginfo1']-time_log_span['LogInfo3']\n",
    "time_log_span['log_timespan'] = time_log_span['log_timespan'].map(lambda x:str(x))\n",
    "time_log_span['log_timespan'] = time_log_span['log_timespan'].map(lambda x:int(x[:x.find('d')]))\n",
    "time_log_span= time_log_span[['Idx','log_timespan']]\n",
    "time_log_span.head()"
   ],
   "id": "cd6c3baaf4dab1e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  log_timespan\n",
       "0    3             4\n",
       "1    4             2\n",
       "2    5             1\n",
       "3    8             0\n",
       "4   11             0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>log_timespan</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 137
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:23:52.533002Z",
     "start_time": "2024-09-26T03:23:52.435812Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 登录时间的平均时间间隔\n",
    "df4 = df3.sort_values(by=['Idx', 'LogInfo3'], ascending=[True, True])"
   ],
   "id": "77c4f8a3cba80d2",
   "outputs": [],
   "execution_count": 139
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:24:36.457141Z",
     "start_time": "2024-09-26T03:24:33.249577Z"
    }
   },
   "cell_type": "code",
   "source": "# df4['LogInfo4'] = df4.groupby('Idx')['LogInfo3'].apply(lambda x:x.shift(1))",
   "id": "f1f6da0f72653a35",
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "incompatible index of inserted column with frame index",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\frame.py:12687\u001B[0m, in \u001B[0;36m_reindex_for_setitem\u001B[1;34m(value, index)\u001B[0m\n\u001B[0;32m  12686\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m> 12687\u001B[0m     reindexed_value \u001B[38;5;241m=\u001B[39m value\u001B[38;5;241m.\u001B[39mreindex(index)\u001B[38;5;241m.\u001B[39m_values\n\u001B[0;32m  12688\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m err:\n\u001B[0;32m  12689\u001B[0m     \u001B[38;5;66;03m# raised in MultiIndex.from_tuples, see test_insert_error_msmgs\u001B[39;00m\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\series.py:5153\u001B[0m, in \u001B[0;36mSeries.reindex\u001B[1;34m(self, index, axis, method, copy, level, fill_value, limit, tolerance)\u001B[0m\n\u001B[0;32m   5136\u001B[0m \u001B[38;5;129m@doc\u001B[39m(\n\u001B[0;32m   5137\u001B[0m     NDFrame\u001B[38;5;241m.\u001B[39mreindex,  \u001B[38;5;66;03m# type: ignore[has-type]\u001B[39;00m\n\u001B[0;32m   5138\u001B[0m     klass\u001B[38;5;241m=\u001B[39m_shared_doc_kwargs[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mklass\u001B[39m\u001B[38;5;124m\"\u001B[39m],\n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m   5151\u001B[0m     tolerance\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m,\n\u001B[0;32m   5152\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Series:\n\u001B[1;32m-> 5153\u001B[0m     \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28msuper\u001B[39m()\u001B[38;5;241m.\u001B[39mreindex(\n\u001B[0;32m   5154\u001B[0m         index\u001B[38;5;241m=\u001B[39mindex,\n\u001B[0;32m   5155\u001B[0m         method\u001B[38;5;241m=\u001B[39mmethod,\n\u001B[0;32m   5156\u001B[0m         copy\u001B[38;5;241m=\u001B[39mcopy,\n\u001B[0;32m   5157\u001B[0m         level\u001B[38;5;241m=\u001B[39mlevel,\n\u001B[0;32m   5158\u001B[0m         fill_value\u001B[38;5;241m=\u001B[39mfill_value,\n\u001B[0;32m   5159\u001B[0m         limit\u001B[38;5;241m=\u001B[39mlimit,\n\u001B[0;32m   5160\u001B[0m         tolerance\u001B[38;5;241m=\u001B[39mtolerance,\n\u001B[0;32m   5161\u001B[0m     )\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\generic.py:5610\u001B[0m, in \u001B[0;36mNDFrame.reindex\u001B[1;34m(self, labels, index, columns, axis, method, copy, level, fill_value, limit, tolerance)\u001B[0m\n\u001B[0;32m   5609\u001B[0m \u001B[38;5;66;03m# perform the reindex on the axes\u001B[39;00m\n\u001B[1;32m-> 5610\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_reindex_axes(\n\u001B[0;32m   5611\u001B[0m     axes, level, limit, tolerance, method, fill_value, copy\n\u001B[0;32m   5612\u001B[0m )\u001B[38;5;241m.\u001B[39m__finalize__(\u001B[38;5;28mself\u001B[39m, method\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mreindex\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\generic.py:5633\u001B[0m, in \u001B[0;36mNDFrame._reindex_axes\u001B[1;34m(self, axes, level, limit, tolerance, method, fill_value, copy)\u001B[0m\n\u001B[0;32m   5632\u001B[0m ax \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_get_axis(a)\n\u001B[1;32m-> 5633\u001B[0m new_index, indexer \u001B[38;5;241m=\u001B[39m ax\u001B[38;5;241m.\u001B[39mreindex(\n\u001B[0;32m   5634\u001B[0m     labels, level\u001B[38;5;241m=\u001B[39mlevel, limit\u001B[38;5;241m=\u001B[39mlimit, tolerance\u001B[38;5;241m=\u001B[39mtolerance, method\u001B[38;5;241m=\u001B[39mmethod\n\u001B[0;32m   5635\u001B[0m )\n\u001B[0;32m   5637\u001B[0m axis \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_get_axis_number(a)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:4433\u001B[0m, in \u001B[0;36mIndex.reindex\u001B[1;34m(self, target, method, level, limit, tolerance)\u001B[0m\n\u001B[0;32m   4431\u001B[0m             indexer, _ \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mget_indexer_non_unique(target)\n\u001B[1;32m-> 4433\u001B[0m target \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_wrap_reindex_result(target, indexer, preserve_names)\n\u001B[0;32m   4434\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m target, indexer\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\indexes\\multi.py:2717\u001B[0m, in \u001B[0;36mMultiIndex._wrap_reindex_result\u001B[1;34m(self, target, indexer, preserve_names)\u001B[0m\n\u001B[0;32m   2716\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m-> 2717\u001B[0m     target \u001B[38;5;241m=\u001B[39m MultiIndex\u001B[38;5;241m.\u001B[39mfrom_tuples(target)\n\u001B[0;32m   2718\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mTypeError\u001B[39;00m:\n\u001B[0;32m   2719\u001B[0m     \u001B[38;5;66;03m# not all tuples, see test_constructor_dict_multiindex_reindex_flat\u001B[39;00m\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\indexes\\multi.py:222\u001B[0m, in \u001B[0;36mnames_compat.<locals>.new_meth\u001B[1;34m(self_or_cls, *args, **kwargs)\u001B[0m\n\u001B[0;32m    220\u001B[0m     kwargs[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mnames\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m=\u001B[39m kwargs\u001B[38;5;241m.\u001B[39mpop(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mname\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[1;32m--> 222\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m meth(self_or_cls, \u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\indexes\\multi.py:617\u001B[0m, in \u001B[0;36mMultiIndex.from_tuples\u001B[1;34m(cls, tuples, sortorder, names)\u001B[0m\n\u001B[0;32m    615\u001B[0m         tuples \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39masarray(tuples\u001B[38;5;241m.\u001B[39m_values)\n\u001B[1;32m--> 617\u001B[0m     arrays \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mlist\u001B[39m(lib\u001B[38;5;241m.\u001B[39mtuples_to_object_array(tuples)\u001B[38;5;241m.\u001B[39mT)\n\u001B[0;32m    618\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(tuples, \u001B[38;5;28mlist\u001B[39m):\n",
      "File \u001B[1;32mlib.pyx:3029\u001B[0m, in \u001B[0;36mpandas._libs.lib.tuples_to_object_array\u001B[1;34m()\u001B[0m\n",
      "\u001B[1;31mValueError\u001B[0m: Buffer dtype mismatch, expected 'Python object' but got 'long long'",
      "\nThe above exception was the direct cause of the following exception:\n",
      "\u001B[1;31mTypeError\u001B[0m                                 Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[142], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m df4[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mLogInfo4\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m df4\u001B[38;5;241m.\u001B[39mgroupby(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mIdx\u001B[39m\u001B[38;5;124m'\u001B[39m)[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mLogInfo3\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39mapply(\u001B[38;5;28;01mlambda\u001B[39;00m x:x\u001B[38;5;241m.\u001B[39mshift(\u001B[38;5;241m1\u001B[39m))\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\frame.py:4311\u001B[0m, in \u001B[0;36mDataFrame.__setitem__\u001B[1;34m(self, key, value)\u001B[0m\n\u001B[0;32m   4308\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_setitem_array([key], value)\n\u001B[0;32m   4309\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m   4310\u001B[0m     \u001B[38;5;66;03m# set column\u001B[39;00m\n\u001B[1;32m-> 4311\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_set_item(key, value)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\frame.py:4524\u001B[0m, in \u001B[0;36mDataFrame._set_item\u001B[1;34m(self, key, value)\u001B[0m\n\u001B[0;32m   4514\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21m_set_item\u001B[39m(\u001B[38;5;28mself\u001B[39m, key, value) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m   4515\u001B[0m \u001B[38;5;250m    \u001B[39m\u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m   4516\u001B[0m \u001B[38;5;124;03m    Add series to DataFrame in specified column.\u001B[39;00m\n\u001B[0;32m   4517\u001B[0m \n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m   4522\u001B[0m \u001B[38;5;124;03m    ensure homogeneity.\u001B[39;00m\n\u001B[0;32m   4523\u001B[0m \u001B[38;5;124;03m    \"\"\"\u001B[39;00m\n\u001B[1;32m-> 4524\u001B[0m     value, refs \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_sanitize_column(value)\n\u001B[0;32m   4526\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m (\n\u001B[0;32m   4527\u001B[0m         key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcolumns\n\u001B[0;32m   4528\u001B[0m         \u001B[38;5;129;01mand\u001B[39;00m value\u001B[38;5;241m.\u001B[39mndim \u001B[38;5;241m==\u001B[39m \u001B[38;5;241m1\u001B[39m\n\u001B[0;32m   4529\u001B[0m         \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(value\u001B[38;5;241m.\u001B[39mdtype, ExtensionDtype)\n\u001B[0;32m   4530\u001B[0m     ):\n\u001B[0;32m   4531\u001B[0m         \u001B[38;5;66;03m# broadcast across multiple columns if necessary\u001B[39;00m\n\u001B[0;32m   4532\u001B[0m         \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcolumns\u001B[38;5;241m.\u001B[39mis_unique \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcolumns, MultiIndex):\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\frame.py:5263\u001B[0m, in \u001B[0;36mDataFrame._sanitize_column\u001B[1;34m(self, value)\u001B[0m\n\u001B[0;32m   5261\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(value, Series):\n\u001B[0;32m   5262\u001B[0m         value \u001B[38;5;241m=\u001B[39m Series(value)\n\u001B[1;32m-> 5263\u001B[0m     \u001B[38;5;28;01mreturn\u001B[39;00m _reindex_for_setitem(value, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mindex)\n\u001B[0;32m   5265\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m is_list_like(value):\n\u001B[0;32m   5266\u001B[0m     com\u001B[38;5;241m.\u001B[39mrequire_length_match(value, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mindex)\n",
      "File \u001B[1;32mD:\\ANACONDA\\Lib\\site-packages\\pandas\\core\\frame.py:12694\u001B[0m, in \u001B[0;36m_reindex_for_setitem\u001B[1;34m(value, index)\u001B[0m\n\u001B[0;32m  12690\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m value\u001B[38;5;241m.\u001B[39mindex\u001B[38;5;241m.\u001B[39mis_unique:\n\u001B[0;32m  12691\u001B[0m         \u001B[38;5;66;03m# duplicate axis\u001B[39;00m\n\u001B[0;32m  12692\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m err\n\u001B[1;32m> 12694\u001B[0m     \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mTypeError\u001B[39;00m(\n\u001B[0;32m  12695\u001B[0m         \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mincompatible index of inserted column with frame index\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m  12696\u001B[0m     ) \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01merr\u001B[39;00m\n\u001B[0;32m  12697\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m reindexed_value, \u001B[38;5;28;01mNone\u001B[39;00m\n",
      "\u001B[1;31mTypeError\u001B[0m: incompatible index of inserted column with frame index"
     ]
    }
   ],
   "execution_count": 142
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:25:47.090217Z",
     "start_time": "2024-09-26T03:25:44.006349Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 执行分组和移位操作，并重置索引\n",
    "temp_result = df4.groupby('Idx')['LogInfo3'].apply(lambda x: x.shift(1)).reset_index(drop=True)\n",
    "# 将结果添加为新列\n",
    "df4['LogInfo4'] = temp_result"
   ],
   "id": "7528ff3e67e41f5a",
   "outputs": [],
   "execution_count": 143
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:25:57.004725Z",
     "start_time": "2024-09-26T03:25:52.310677Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df4['time_span'] = df4['LogInfo3']-df4['LogInfo4']\n",
    "df4['time_span'] = df4['time_span'].map(lambda x:str(x))\n",
    "df4 = df4.replace({'time_span':{'NaT':'0 days 00:00:00'}})\n",
    "df4['time_span'] = df4['time_span'].map(lambda x:int(x[:x.find('d')]))"
   ],
   "id": "ab51048e1aea35ca",
   "outputs": [],
   "execution_count": 144
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:26:05.608184Z",
     "start_time": "2024-09-26T03:26:05.572313Z"
    }
   },
   "cell_type": "code",
   "source": [
    "avg_log_timespan = df4.groupby('Idx',as_index=False).time_span.mean().rename(columns={'time_span':'avg_log_timespan'})\n",
    "avg_log_timespan.head()"
   ],
   "id": "c04ac9fe6f6ebbde",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  avg_log_timespan\n",
       "0    3          -149.231\n",
       "1    4           590.818\n",
       "2    5          -197.182\n",
       "3    8          -241.568\n",
       "4   11          -270.067"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>avg_log_timespan</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>-149.231</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>590.818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>-197.182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>-241.568</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>-270.067</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 145
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:26:25.382105Z",
     "start_time": "2024-09-26T03:26:25.370899Z"
    }
   },
   "cell_type": "code",
   "source": [
    "log_info = pd.merge(log_cnt,time_log_span,how='left',on='Idx')\n",
    "log_info = pd.merge(log_info,avg_log_timespan,how='left',on='Idx')\n",
    "log_info.head()"
   ],
   "id": "3253ed5b12b33b34",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  log_cnt  log_timespan  avg_log_timespan\n",
       "0    3       26             4          -149.231\n",
       "1    4       11             2           590.818\n",
       "2    5       11             1          -197.182\n",
       "3    8      125             0          -241.568\n",
       "4   11       30             0          -270.067"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>log_cnt</th>\n",
       "      <th>log_timespan</th>\n",
       "      <th>avg_log_timespan</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>26</td>\n",
       "      <td>4</td>\n",
       "      <td>-149.231</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>590.818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "      <td>1</td>\n",
       "      <td>-197.182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>125</td>\n",
       "      <td>0</td>\n",
       "      <td>-241.568</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>-270.067</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 146
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-26T03:26:38.547730Z",
     "start_time": "2024-09-26T03:26:38.479902Z"
    }
   },
   "cell_type": "code",
   "source": "log_info.to_csv('log_info_feature.csv',encoding='gbk',index=False)",
   "id": "30870c16741e664e",
   "outputs": [],
   "execution_count": 147
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
